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

自定义Hook中useSelector无法正确更新状态的问题求助

自定义Hook中useSelector无法正确更新状态的问题求助

我现在正尝试编写一个自定义Hook,用来抽离一些可复用在多个组件中的Redux相关操作,这个Hook里包含了dispatch调用和读取selector的逻辑。

但目前遇到了一个问题:selector无法正确更新其值——Redux DevTools里明明显示stack数组已经有一个元素了,但我在代码中打印这个selector对应的数组时,它却始终是空的。

我的Hook代码如下:

function useManager() {
  const [isManaged, setManaged] = useState(false)
  const dispatch = useAppDispatch() // 只是重新导出了Redux的useDispatch
  let stackArray = useAppSelector(stack) // stack是已定义的selector,逻辑是state => state.stack
  const checkArrayLength = () => {
    return stack.length > 0;
  }

  const setManagedState = useCallback(
    () => {
      if(checkArrayLength()){
        console.log(stack.length) <== 这里总会打印0
        setManaged(true)
      }
    },
    [],
  )

  return {
    setManagedState,
    isManaged,
  }
}

在另一个组件中调用这个Hook的代码:

function Component(props) {

    const { setManagedState, isManaged } = useManager();
    //...
    /* 我在这个组件内部用useSelector来更新store里的stack数组 */
    //...
    
     setManagedState() // 这里会打印0,哪怕我已经往stack里添加了元素,而且能在Redux工具里看到变化

}

我是不是漏了什么需要检查的点?我尝试过查看useSelector的第二个参数(相等性比较函数),但还是没搞清楚问题出在哪。

我刚接触函数式组件和Hook没多久,所以大概率是忽略了某个细节——会不会和useSelector更新所需的渲染周期有关?


备注:内容来源于stack exchange,提问作者Kaki Master Of Time

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:14:34