$sessionStorage
Во время текущей поездки сохраните временное состояние текущего экземпляра прибора, например максимальную скорость, наблюдаемую прибором, накопленное время или результат расчета предыдущего кадра. Пустой после поездки.
Область действия хранилища
«Сеанс» здесь относится к Текущая поездка. За одну поездку прибор может получить ранее сохраненное значение при многократном выполнении main(), поэтому он подходит для поддержания межкадрового состояния, такого как пиковые значения и счетчики.
Хранилище одновременно принадлежит текущему экземпляру инструмента: разместите на странице два одинаковых инструмента, и каждый сохранит свое состояние.
Когда сохранять, а когда очищать
| Состояние | поведение хранилища |
|---|---|
| Та же поездка, тот же постоянно работающий экземпляр прибора | Зарезервировано между несколькими вызовами main(). |
| Текущая поездка заканчивается или приложение выходит из состояния записи. | Пустой. get возвращает null, если нет текущей поездки, set не сохраняет записи. |
| Начать следующее путешествие | Запускается с пустого хранилища и не наследует значения из предыдущего раздела. |
| Сценарий инструмента перезагружается, экземпляр рисования уничтожается или приложение перезапускается. | Временные значения теряются и не будут восстановлены даже позже в ходе той же поездки. |
| Предварительный просмотр редактора | Используйте независимое хранилище предварительного просмотра и не записывайте реальный маршрут автомобиля; значение предварительного просмотра не будет использоваться при переключении на реальный бег. |
Он сохраняет состояние, наблюдаемое и рассчитанное во время работы прибора. Если прибор включен в середине пути, пиковое значение поездки до включения не может быть автоматически получено; данные, которые необходимо хранить в течение длительного времени, не следует сохранять только здесь.
Чтение и запись объектов и массивов
И 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.