用途:提供一种集中式状态管理模式,以 Zustand vanilla store 为机制,让程序更简单、可测试、易推理。核心原则适用于任何状态管理方式。
主要能力与原则:
- 用不可变值替代可变状态,setState() 使用函数式更新返回新对象/Map,保证转换原子性。
- 派生而非缓存:能从现有状态计算的值按需计算,避免维护易失同步的索引。
- 所有状态集中在一个 store(createStore),避免多 store 造成跨域转换非原子。
- 状态转换只依赖当前状态与事件数据,保持纯函数、无副作用。
- 允许资源共置(WebSocket 句柄、定时器、AbortController 等),但转换内不得执行副作用。
- 可变运行时资源(如 AbortController)视为状态,与相关领域状态放在同一 store。
- 非 React 应用将副作用集中在单个 subscribe() 中,副作用由状态形状派生,而非针对具体事件。
使用方式:非 React 场景使用 zustand/vanilla(无 React 依赖,可在任意 JS 运行时运行);用 createStore() 定义带类型的状态接口;事件处理器解析事件并调用 setState();subscribe() 响应状态变化执行副作用;需要针对特定变化时用 (state, prevState) 做差异比较;可用 subscribeWithSelector 只订阅关心的切片。
适用场景:Chrome 扩展、服务端、CLI 等非 React 声明式环境。React 应用应直接使用 Zustand hook,而非此模式。
限制:subscribe 回调只拿到新旧状态,不知道触发事件,因此需要事件数据的副作用(如转发特定消息)应留在处理器中。资料未提供安装命令、版本要求或性能基准。