Action 机制
Action 把多次 observable 修改包在事务里:事务结束前不向外传播,结束后统一通知;且 action 执行期间不追踪新依赖(避免 observer 误绑)。
1. 为何需要 action
| 无 action | 有 action |
|---|---|
| 每次赋值可能触发传播 | 批量、可预测 |
| 严格模式报错(若开启) | 符合 MobX 规范 |
2. API
| API | 用途 |
|---|---|
action(fn) | 包装函数 |
action.bound | 绑定 this |
runInAction | 异步回调里继续事务 |
flow | generator + async,内置 pending 语义 |
3. 严格模式
configure({ enforceActions: 'always' }):禁止在 action 外改 observable(开发推荐)。
4. 异步
text
async () => {
await fetch()
runInAction(() => { this.data = res }) // 必须在 action 内赋值
}5. 总结
所有会改 store 的代码路径都应落在 action 内;与 Redux「reducer 纯」不同,MobX 允许可变,但要用 action 划边界。