核心概念
Store 模式与入口
理解本地 store、共享权威端、client mirror 与 Coaction 的隔离包边界。
同一套 public store contract 会出现在三种运行模式中。
| 模式 | store.share | 写入权威 | 方法结果 |
|---|---|---|---|
| Local | false | 当前 runtime | 同步 |
| Shared main | 'main' | main runtime | 在权威端同步 |
| Shared client | 'client' | main runtime | 向 client 返回 Promise |
Local 模式
import { create } from 'coaction';
const store = create(source);Local 模式在一个 runtime 内拥有状态与执行权。除非显式启用,否则它不生成 patch,因此是建议的起点。
Shared main 模式
当 store 拥有 main transport,或运行在被识别的 Worker 权威环境时,它会成为共享权威端:
import { create } from 'coaction/shared';
const store = create(source, { transport });Main store 执行 action、提交状态、发送有序 patch,并提供 full snapshot。
Shared client 模式
传入 Worker、SharedWorker 或 client transport 会创建镜像:
const store = create(source, { worker });
await store.getState().increment();Client method 是异步的,因为执行发生在权威端。client 可以读取并订阅本地镜像状态,但直接调用 setState() 与 apply() 会被拒绝。
隔离入口
包提供静态边界,便于 bundler 排除无关运行时代码:
| 入口 | 包含内容 |
|---|---|
coaction | 本地创建、生命周期 helper、signal primitive |
coaction/shared | 共享创建、JSON protocol、权威端与 client 镜像 |
coaction/adapter | 外部 store binding 与 state/patch 安全 helper |
框架包暴露自己的 create() wrapper,并可能同时支持 local 与 worker option。Vanilla 代码直接选择 coaction 或 coaction/shared 可获得最清楚的 bundle 边界。
三件都被叫作"同步"的事
它们可以组合,但互不蕴含:
| 是什么 | |
|---|---|
| 响应式追踪 | 哪些组件在字段变化时重渲染 —— observer、selector、computed getter。 |
| 共享权威 | 一个 store 拥有状态,其它 JavaScript 上下文持有它的镜像,并通过 transport 调用它的 action。即本页。 |
| 远端同步 | 持久 outbox、对服务端的 rebase、离线恢复 —— @coaction/sync。 |
本地 store 可以在完全不创建 Worker 的情况下与服务端同步。而共享 store 的镜像是同一个权威端的 视图,不是会各自演化再合并的副本 —— 后者才是这套词汇在多数其它库里的含义。
继续阅读共享运行时概览,了解权威语义与部署规则。