You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否需将Zustand Store加入useEffect依赖数组?与Redux对比

关于Zustand Store在useEffect依赖列表中的疑问

首先直接给结论:不需要把整个notify对象加入useEffect依赖,但你的写法可以优化——应该单独提取addMessage方法,而非获取整个store对象

原因分析

Zustand创建的store中,像addMessage这类方法是稳定的引用,从store创建时就固定下来,不会随着state的更新而改变,这一点和Redux的dispatch完全一致。

但如果你像示例中那样直接通过useNotificationStore()获取整个store对象,这个对象会在state(比如notifications数组)变化时生成新的引用:

  • 如果把它加入依赖列表,会导致useEffect在每次state更新时都触发,完全没必要;
  • 如果不加入,ESLint会抛出依赖缺失的警告,而且如果后续在useEffect中用到store里的其他state属性,可能会拿到旧的状态值。

正确写法

单独提取需要的方法,这样既保证引用稳定,也符合ESLint的规范:

function Notify() {
  // 只提取需要的addMessage方法
  const addMessage = useNotificationStore(state => state.addMessage);
  
  useEffect(() => {
    // 执行异步操作后调用
    addMessage({ /* 你的消息 payload */ })
  }, [dependency1, addMessage]) // 这里可以放心加入addMessage,因为它的引用不会变

  return <div />
}

补充说明

虽然Zustand的方法引用是稳定的,理论上不加入依赖也不会有问题,但为了避免ESLint警告,同时让代码逻辑更清晰,建议还是把提取出来的方法加入依赖列表——它不会导致useEffect不必要地重复执行。

内容的提问来源于stack exchange,提问作者Sushant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:30:41