React Redux selector 函数被多次触发,求解答?

demo链接:https://codesandbox.io/s/char...

redux store定义在了src/store/store.js里,slicer在src/store/sizeSlice.js里。

刚刚入门redux,现在在App.js里使用了两个useSelector钩子,发现每次通过addCol或者addRow这两个组件更改redux状态时,会触发四次输入(期待应该是点击每一个按钮各触发对应的selector函数一次,而不触发另外的selector函数?),而且每次多余的触发都是另外的selector函数输出,例如点击addRow按钮,更改store中row状态,则selectCol会被触发三次。非常疑惑,期待解答!

阅读 1.9k
1 个回答

你写在selector里的console意义不大,它只代表你selector调用了几次,而selector是useSelector的参数,具体怎么调用调用几次是源码实现的问题;
react中关心的是它的返回值,在App中

  useEffect(()=> {
    console.log("row count:",row);
  },[row])
  useEffect(()=> {
    console.log("col count:",col)
  },[col])

其实不看源码也能想象出为什么seletor函数会调用不只一次,我们去实现一个自定义hook(伪):

function useSelector(selector) {
  useEffect(()=>{
   selector()
  }, [parm1,  parm2, parm3])
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题