自定义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
相关产品推荐
相关产品推荐

