Persistence(持久化)
Actors 可以持久化其内部状态并在以后恢复。持久化是指将 actor 的状态存储在持久存储中,例如 localStorage 或数据库。恢复是指从持久存储中恢复 actor 的状态。
在前端应用程序中,持久化对于在浏览器重新加载时保持状态非常有用。在后端应用程序中,持久化允许工作流跨多个请求,能够在服务重启时存活,具有容错能力,能够表示长时间运行的进程,并且可以进行审计和追踪。
在 XState 中,你可以通过 actor.getPersistedSnapshot()
获取要持久化的快照(状态),并通过 createActor(behavior, { snapshot: restoredState }).start()
恢复它:
const feedbackActor = createActor(feedbackMachine).start();
// 获取要持久化的状态
const persistedState = feedbackActor.getPersistedSnapshot();
// 持久化状态
localStorage.setItem('feedback', JSON.stringify(persistedState));
// 恢复状态
const restoredState = JSON.parse(localStorage.getItem('feedback'));
const restoredFeedbackActor = createActor(feedbackMachine, {
snapshot: restoredState,
}).start();
持久化状态
你可以通过 actor.getPersistedSnapshot()
获取要持久化的状态:
const feedbackActor = createActor(feedbackMachine).start();
// 获取要持久化的状态
const persistedState = feedbackActor.getPersistedSnapshot();
内部状态可以从任何 actor 持久化,而不仅仅是状态机。请注意,持久化状态与 actor.getSnapshot()
的快照不同;持久化状态表示 actor 的内部状态,而快照表示 actor 最后发出的值:
const promiseActor = fromPromise(() => Promise.resolve(42));
// 获取最后发出的值
const snapshot = promiseActor.getSnapshot();
console.log(snapshot);
// 输出 42
// 获取持久化状态
const persistedState = promiseActor.getPersistedSnapshot();
console.log(persistedState);
// 输出 { status: 'done', data: 42 }
恢复状态
你可以通过将持久化状态传递给 createActor(logic, { snapshot: restoredState })
的第二个参数中的 state
选项来恢复 actor 到持久化状态:
// 获取持久化状态
const restoredState = JSON.parse(localStorage.getItem('feedback'));
// 恢复状态
const feedbackActor = createActor(feedbackMachine, {
snapshot: restoredState,
});
feedbackActor.start();