Skip to Content
👋 Добро пожаловать в документацию lite-fsm!
APIPersist API

Persist API

@lite-fsm/persist сохраняет снимок MachineManager в произвольное хранилище и восстанавливает его.

Импорт

import { createJsonStorage, persistManager } from "@lite-fsm/persist"; import type { PersistController, PersistManagerOptions, PersistStatus, PersistStorage, PersistedRecord, } from "@lite-fsm/persist"; import { useIsPersistRestoring, usePersistStatuses } from "@lite-fsm/persist/react";

persistManager(manager, options)

const persist = persistManager(manager, { storage: createJsonStorage({ key: "app:state:v1", storage: () => window.localStorage, }), storageVersion: 1, machines: ["counter"], throttleMs: 500, });

Опции

ОпцияНазначение
storageАдаптер { get, set, remove, subscribe? }
machines?Какие машины попадают в снимок
strategy?Режим hydrate; по умолчанию "merge"
storageVersion?Версия записи
maxAge?TTL записи в миллисекундах
throttleMs?Минимальный интервал между сохранениями
shouldSave?Фильтр transitions перед сохранением
migrate?Миграция старой записи
onRestoreSettled?Колбэк результата восстановления
onError?Колбэк ошибок restore, save, clear

strategy не объединяет поля context автоматически и не заменяет всё состояние менеджера. Она передаётся в manager.hydrate(); для акторов, сохраняемых в снимок, "merge" сохраняет акторов вне входящего набора записей, а "replace" удаляет отсутствующих.

Контроллер

МетодНазначение
start()Подписаться на manager/storage и восстановить запись
restore()Прочитать хранилище и применить снимок
save()Сразу записать текущий снимок
flush()Дописать отложенное сохранение
clear()Удалить запись и сбросить статус
getStatus()Вернуть текущий PersistStatus
subscribeStatus(cb)Подписка на изменение статуса

Хранилище

type PersistStorage<S> = { get(): MaybePromise<PersistedRecord<S> | undefined>; set(record: PersistedRecord<S>): MaybePromise<void>; remove(): MaybePromise<void>; subscribe?(cb: () => void): () => void; };

createJsonStorage подходит для синхронных storage API с getItem, setItem, removeItem. storage принимает только функцию: она не вызывается при создании адаптера, вызывается заново на каждом get, set, remove и не кешируется. subscribe добавляйте вручную через расширение PersistStorage.

React-хуки

const [status] = usePersistStatuses(); const restoring = useIsPersistRestoring();

Хуки работают через ближайший FSMContextProvider и вне него бросают ошибку провайдера. usePersistStatuses() возвращает массив той же длины и в том же порядке, что persist; элемент без getStatus() и subscribeStatus() возвращается как null. Если persist не передан или равен [], возвращается [].

useIsPersistRestoring возвращает true, если хотя бы один статус, отличный от null, имеет phase === "restoring"; для блокировки интерфейса до первого восстановления проверяйте также "idle" у нужного статуса.

Подробное руководство: @lite-fsm/persist.

Last updated on