使用 create API 创建一个带有初始状态的 store,推荐在组件代码之外创建,以获得更好的代码拆分。例如,在 store.ts 中创建并导出,并和你的 index.tsx 组件代码放在同一目录下便于引入。
store 可以是全局的,也可以是局部的,这取决于你的需求。
store 放在全局下,然后在应用程序的任何地方导入它。store,然后在组件内引入使用以保持组件逻辑的独立性。请确保 store 内的状态始终是 Pure Object,不含函数、类实例等非结构化数据。如果需要,请考虑使用 ref。
如何你需要调试,可以使用 devtools 来启用 Redux DevTools Extension 支持,详情参考 与 Redux DevTools 集成。
使用 store 暴露的 useSnapshot Hook 在组件中获取快照(snapshot),并使用它参与渲染。
你也以传入一个 selector 函数,手动指定你需要消费的状态,以优化渲染,详情参考 可选的渲染优化。
在复杂状态场景下,为了提高代码可读性,你也可以在相邻 store 文件内定义一些语意化的 Hooks 来使用,比如:
如果只是为了读取状态,可以在遵循 immutable 原则的情况下,直接读取 store.mutate 对象即可。
上述方式覆盖大多数情况,如果你实在需要在组件外获取快照,可以使用 store.snapshot()。
你可以使用 store.mutate 在任何地方变更状态,Reactive 会自动触发重新渲染。
Reactive 采用了一种读写分离的策略,快照(Snapshot)被认为时某个阶段的「快照状态」,是不可扩展的,你只能通过修改 store.mutate 对象来变更状态,以生成一份全新的快照,遵循 immutable 的设计原则。
你也可以将变更状态的逻辑提取到 store 文件中,以便复用。
然后在组件中使用这些方法。
如果需要,你也可以通过 store.restore() 轻松地恢复到初始状态,比如在组件卸载时,重置状态。