指南

迁移到 4.0

更新 shared 导入,检查集成 contract,并让本地 React 应用使用受支持的版本。

使用 action、selector 和 getter 的原生本地应用通常可以保留现有 API。请使用 React 18 或 19, 并检查所有跨 JavaScript 上下文共享状态的导入。 仓库迁移指南包含更完整的 adapter 和本地图结构 contract。

选择对应入口

用途4.0 导入
Vanilla 本地 storecoaction
Vanilla 共享权威端或 clientcoaction/shared
React 本地 store@coaction/react
React 共享权威端或 client@coaction/react/shared
集成与 commit hookscoaction/adapter
可管理生命周期的派生 selector 和路径coaction/derived

旧的 coaction/local@coaction/react/local 别名已经移除。此前使用默认入口的共享 store 必须切换到 /shared

-import { create } from '@coaction/react';
+import { create } from '@coaction/react/shared';

 const store = create(source, { worker });

默认入口会拒绝非 null 的共享选项,例如 workertransportclientTransport。 显式传入 undefined 的选项仍被接受,方便 feature detection 和 SSR。本地入口不会把共享 transport 运行时打进 bundle。

检查底层写入与 middleware

store.apply(nextState)store.apply(base, patches) 都会发布 commit。传入 patches 时,base 必须是当前状态: 使用 apply(undefined, patches) 省略 base,或传入 getPureState()。错误的 base 会在修改状态和发布 commit 前被拒绝。

-store.apply(otherState, patches);
+store.apply(store.getPureState(), patches);

Adapter 作者应保留 Coaction 对 store.apply 的所有权,通过 internal.externalApply 提供自身 runtime 的写入函数。 Middleware 应使用 StoreCommit hooks 观察所有受支持的 transition,包括不经过 apply 的写入。

不要假设 patch pair 总是包含叶子路径。位置相关编辑可能回退到发生变化的 top-level key replacement; 本地图结构可能需要 path: [] 的完整 root snapshot。Replay 必须保留已经提交的值和引用拓扑。 本地循环引用可以作为完整值用于初始化或 replacement;从 draft 引用构造循环、编辑循环 draft 内部仍不属于受支持的 recipe contract。 这些本地保证不会扩展共享 JSON contract

检查 React 和 computed 假设

React 18 和 19 受到支持并经过测试,React 17 已不在 peer range 中。 服务端 selector 读取当前状态,与 whole-state 和 observer reader 一致。确实需要初始状态时,请显式使用 getInitialState()。 SSR 应使用请求独立的 store,并准备一致的服务端与客户端 hydration 数据。

原生 getter 仍以 store/slice 字段为依赖边界。React selector 和 observer 使用深层路径追踪; derive(..., { deep: true }) 为可管理生命周期的 computed selector 显式开启深层追踪。 Identity、生命周期和失效边界详见 computed state

检查远程同步

@coaction/sync 要求持久化存储和 JSON 状态。不受支持的本地写入会在 commit 前被拒绝。 Checkpoint 包含 formatVersion;不受支持的版本和格式错误的 checkpoint 会被拒绝,并保留原有存储内容。 没有版本字段的旧 checkpoint 按 format 1 读取。

升级 CRUD、Supabase 或 Firestore 集成时,请检查对应 README:CRUD adapter 保留远程 base, Supabase 的 schema 配置同时应用于读写,Firestore 分离读取来源与写入地址。 配置和错误处理见远程同步

响应式追踪、共享权威和远程同步是独立能力。本地 store 不需要 Worker 也能与服务器同步; 共享 mirror 跟随同一个权威端,并不是可以独立分叉再合并的远程副本。

本页目录