在react-redux v7中,我们现在有了useDispatch()
钩子来获取对商店调度的引用。看到这里:https://react-redux.js.org/api/hooks#usedispatch
然后需要将生成的dispatch
函数列为任何useEffect
,useMemo
等钩子的依赖项。为什么会这样?
经过一些测试,该应用程序仍然可以完美运行,而没有将dispatch
列为依赖项,因此我只能假定它没有变化。
dispatch
函数是否有可能改变?
答案 0 :(得分:3)
对此有两个答案。
首先,据我所知,React“钩子规则” ESLint规则知道如何专门处理内置钩子。例如,它知道useState()
总是返回相同的setter函数实例,因此您不必将其包括在useEffect()
依赖项数组中({ {1}}电话)。
但是,皮棉规则不知道关于自定义钩子,无论它们是来自库还是来自您自己的钩子。因此,由于dispatch
是一个自定义钩子,因此,棉绒规则必须假定useReducer()
发生的任何变化都可以改变,并试图告诉您需要将其列出作为依赖项。
第二个答案是可以将新的商店引用传递给useDispatch()
,在这种情况下,dispatch
钩子将返回另一个<Provider>
。
因此,实际上,在deps数组中不包含store.dispatch
的情况下,代码可以正常运行,因为您的应用程序几乎始终都在使用同一商店实例。但是,由于皮棉规则不知道这一点,因此您可能仍需要将其包括在列表中以使其变得安静。
(来源:我是Redux的维护者,并帮助指导了我们的hooks API的实现:))