$sessionStorage
Trong chuyến đi hiện tại, hãy lưu trạng thái tạm thời cho phiên bản thiết bị hiện tại, chẳng hạn như tốc độ tối đa mà thiết bị quan sát được, thời gian tích lũy hoặc kết quả tính toán của khung trước đó. Trống rỗng sau chuyến đi.
Phạm vi lưu trữ
"Phiên" ở đây đề cập đến Chuyến đi hiện tại. Trong cùng một hành trình, thiết bị có thể truy xuất giá trị đã lưu trước đó khi thực hiện main() nhiều lần, do đó phù hợp để duy trì trạng thái xuyên khung như giá trị đỉnh và bộ đếm.
Bộ lưu trữ đồng thời thuộc về phiên bản công cụ hiện tại: đặt hai công cụ giống hệt nhau trên trang và mỗi công cụ sẽ lưu trạng thái riêng của nó.
Khi nào nên giữ và khi nào nên xóa
| Tình trạng | hành vi lưu trữ |
|---|---|
| Cùng một chuyến đi, cùng một phiên bản thiết bị chạy liên tục | Được bảo lưu giữa nhiều cuộc gọi tới main(). |
| Chuyến đi hiện tại kết thúc hoặc ứng dụng thoát khỏi trạng thái ghi | Trống. get trả về null khi không có chuyến đi nào được kích hoạt, set không giữ lại thao tác ghi. |
| Bắt đầu hành trình tiếp theo | Bắt đầu từ bộ nhớ trống và không kế thừa các giá trị từ phần trước. |
| Tập lệnh công cụ tải lại, phiên bản vẽ bị hủy hoặc ứng dụng khởi động lại | Các giá trị tạm thời bị mất và thậm chí sẽ không được khôi phục sau đó trong cùng một chuyến đi. |
| Xem trước trình chỉnh sửa | Sử dụng bộ lưu trữ xem trước độc lập và không ghi lại hành trình thực tế của xe; giá trị xem trước sẽ không được sử dụng khi chuyển sang chạy thực tế. |
Nó lưu lại trạng thái được quan sát và tính toán trong quá trình hoạt động của thiết bị. Nếu thiết bị được bật giữa chừng, không thể tự động lấy được giá trị cao nhất của hành trình trước khi bật; dữ liệu cần được lưu giữ trong một thời gian dài không nên chỉ được lưu ở đây.
Đọc và ghi các đối tượng và mảng
Cả get và set đều sử dụng bản sao dữ liệu. Ví dụ: nếu bạn lấy ra một mảng và thêm các phần tử vào đó, mảng ban đầu trong bộ lưu trữ sẽ không thay đổi và bạn cần gọi lại set để lưu các thay đổi.
Khóa phải là một chuỗi. Có thể chứa số hữu hạn, chuỗi, giá trị Boolean, null, cũng như các đối tượng và mảng thông thường bao gồm các giá trị này. Không thể lưu các hàm, View, tham chiếu vòng tròn và các đối tượng đặc biệt. Sau khi đặt khóa thành null, hãy đọc khóa để nhận null; giao diện hiện tại cung cấp hai phương thức, get và set.
Ví dụ: Tốc độ tối đa quan sát được trong chuyến đi này
Hai đầu vào Dữ liệu cơ bản được xác định trong Cấu hình tham số: tốc độ với mã định danh speed và trạng thái ghi với mã định danh recording. Một đường ngang được hiển thị khi không có chuyến đi nào được kích hoạt; mỗi lần chạy sẽ so sánh tốc độ hiện tại với giá trị đỉnh đã lưu, sau đó lưu giá trị lớn hơn. Giá trị đỉnh được lưu trong km/h và được chuyển đổi theo đơn vị hiện tại khi hiển thị để tránh trộn lẫn các đơn vị.
Trong trường hợp không có thử nghiệm, giá trị đỉnh quan sát được sẽ được giữ lại và giá trị 0 hiệu dụng sẽ tham gia tính toán một cách bình thường; đoạn tiếp theo của hành trình bắt đầu từ giá trị null.
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>
);
}
Giới hạn dung lượng
Mỗi cửa hàng có tối đa 256 khóa, với tổng kích thước dữ liệu khoảng 1 MiB; một khóa đơn có tối đa 256 UTF-8 byte. Ngoài ra còn có các giới hạn về kích thước và lồng ghép trong việc sao chép các giá trị. Nếu vượt quá giới hạn hoặc một giá trị không được hỗ trợ được truyền vào, lỗi sẽ được báo cáo và việc ghi không thành công sẽ không ghi đè lên giá trị hợp lệ ban đầu.
Thích hợp để lưu một lượng nhỏ trạng thái thống kê. Việc nối từng mảng theo từng khung trong một thời gian dài sẽ tiếp tục phát triển. Đường cong nên sử dụng $data.history trước hoặc tự giới hạn độ dài mảng.
phương pháp
get(key: string)unknown | nullĐọc giá trị mà phiên bản đồng hồ này đã lưu trong chuyến đi hiện tại. Trả về null nếu khóa không tồn tại; đối tượng và mảng được trả về dưới dạng bản sao độc lập.
set(key: string, value: unknown)voidLưu bản sao của giá trị vào khóa được chỉ định hoặc ghi đè khóa đó. Thao tác ghi không được giữ lại khi không có chuyến đi đang diễn ra. Trả về undefined.