$sessionStorage
在當前行程內,為當前儀表實例儲存臨時狀態,例如該儀表觀察到的最高速度、累計次數或上一幀的計算結果。行程結束後清空。
儲存範圍
這裡的“工作階段”指 本次行程。同一行程中,儀表多次執行 main() 時可以取回之前儲存的值,因此適合維護峰值、計數器等跨幀狀態。
儲存同時歸屬於當前儀表實例:在頁面上放置兩塊相同儀表,各自儲存自己的狀態。
何時保留,何時清空
| 情況 | 儲存行為 |
|---|---|
| 同一行程、同一個持續執行的儀表實例 | 多次呼叫 main() 之間保留。 |
| 當前行程結束,或 App 退出記錄狀態 | 清空。沒有活動行程時 get 回傳 null,set 不保留寫入。 |
| 開始下一段行程 | 從空儲存開始,不繼承上一段的值。 |
| 儀表腳本重新加載、繪製實例被銷毀或 App 重啓 | 臨時值丟失,即使之後仍在同一行程中,也不會恢復。 |
| 編輯器預覽 | 使用獨立的預覽儲存,不寫入實車行程;切換到實際執行時不會沿用預覽值。 |
它儲存的是儀表執行期間觀察和計算出的狀態。中途才打開儀表,不能自動得到打開之前的行程峰值;需要長期保留的資料也不應僅儲存在這裡。
讀寫物件與陣列
get 和 set 都使用資料副本。例如,取出一個陣列後向其中添加元素,儲存里的原陣列不會隨之改變,需要再呼叫 set 才會儲存修改。
鍵必須是字串。可以儲存有限數字、字串、布爾值、null,以及由這些值組成的普通物件和陣列。函式、View、循環引用和特殊物件不能儲存。把某個鍵設為 null 後,讀取該鍵得到 null;當前接口提供 get 和 set 兩個方法。
示例:本次行程中觀察到的最高速度
在 參數設定 中定義兩個 基礎資料 輸入:標識符 speed 的速度,以及標識符 recording 的記錄狀態。沒有活動行程時顯示橫線;每次運行把當前速度與已儲存峰值比較,再儲存較大值。峰值統一以 km/h 儲存,顯示時按當前單位轉換,避免混用單位。
缺測時保留已觀察到的峰值,有效零值正常參與計算;下一段行程從空值開始。
function main() {
if ($data.current.recording !== true) {
return (
<Text fontSize={48} color={$env.foreground}>
—
</Text>
);
}
const speed = $data.current.speed;
const saved = $sessionStorage.get('peakKmh');
let peak = typeof saved === 'number' ? saved : null;
if (typeof speed?.value === 'number') {
const kmh = speed.unit === 'mph' ? speed.value * 1.609344 : speed.value;
peak = peak == null ? kmh : Math.max(peak, kmh);
$sessionStorage.set('peakKmh', peak);
}
const unit = speed?.unit ?? $env.speedUnit;
const value =
peak == null ? '—' : Math.round(unit === 'mph' ? peak / 1.609344 : peak);
return (
<VStack spacing={6}>
<Text fontSize={48} color={$env.foreground}>
{value}
</Text>
<Text color={$env.accent}>{unit}</Text>
</VStack>
);
}
容量限制
每個儲存最多 256 個鍵,總資料量約 1 MiB;單個鍵最多 256 個 UTF-8 位元組。值的複製也有大小和嵌套限制。超過限制或傳入不支持的值會報錯,失敗寫入不會覆蓋原來的有效值。
適合儲存少量統計狀態。長時間逐幀追加陣列會持續增長,曲線應優先使用 $data.history,或自行限制陣列長度。
方法
get(key: string)unknown | null讀取這個儀表實例在目前行程中儲存的值。鍵不存在時回傳 null;物件和陣列會以獨立副本回傳。
set(key: string, value: unknown)void儲存或覆蓋指定鍵。值會複製後儲存;沒有進行中的行程時不保留寫入。回傳 undefined。