Zustand 里怎么监听某个状态变化并执行副作用?
我用 Zustand 管理了一个 isLogin 状态,想在它变成 true 的时候自动跳转首页,但不知道怎么监听这个变化。试过在组件里 useEffect 监听,但感觉不太对,应该在 store 里处理吧?
现在 store 是这样写的:
import { create } from 'zustand'
const useStore = create((set) => ({
isLogin: false,
login: () => set({ isLogin: true }),
}))
有没有办法在 set 之后自动触发某个函数?比如类似 Vue 的 watch 那样?
在zustand的set函数里可以传第二个参数,是个回调函数,会在状态更新后执行。你可以在login方法里这样改:
不过说实话,我当时也卡在这,后来发现更好的做法是在组件里用subscribe。因为跳转这种副作用通常属于视图层逻辑,放在store里不太干净:
两种方式都能用,看你的具体场景。如果是简单项目用第一种就行,复杂点的话建议第二种更规范。