Easy Peasy 中如何正确使用 action 监听状态变化?
我在用 Easy Peasy 写一个计数器,想在 count 变化时自动触发一个 action 打印日志,但写完发现根本没执行,是不是写法有问题?
我试过把监听逻辑放在 effect 里,也试过直接在 action 里调用,都不行。控制台完全没输出,感觉监听没生效。
const store = createStore({
count: 0,
logChange: action((state) => {
console.log('Count changed:', state.count);
}),
increment: action((state) => {
state.count += 1;
// 想在这里自动触发 logChange,但手动调用又觉得不对
})
});
listen这个内置方法,不是直接在 action 里调。Easy Peasy 的
listen是专门用来监听 state 变化并触发副作用的,官方文档里也叫 "Side Effects"。你之前试的那些方法都不对路。正确的写法是这样的:
这里有个坑要提醒你:
listen里的回调只在 state 真正变化 时才会触发。如果你 increment 之后值没变(比如已经是最大值了),它不会触发。另外,listen 里的回调是同步的,如果你在里面想搞异步操作,比如发请求,那得换个写法,用 thunk 配合:
这样结构更清晰,监听逻辑和业务逻辑分离,count 每次变化都会自动触发 logChange,不需要在每个 action 里手动调用。