在什么情况下Redux派遣会发生变化?

时间:2019-06-27 16:53:02

标签: javascript reactjs redux react-redux

在react-redux v7中,我们现在有了useDispatch()钩子来获取对商店调度的引用。看到这里:https://react-redux.js.org/api/hooks#usedispatch

然后需要将生成的dispatch函数列为任何useEffectuseMemo等钩子的依赖项。为什么会这样?

经过一些测试,该应用程序仍然可以完美运行,而没有将dispatch列为依赖项,因此我只能假定它没有变化。

dispatch函数是否有可能改变?

1 个答案:

答案 0 :(得分:3)

对此有两个答案。

首先,据我所知,React“钩子规则” ESLint规则知道如何专门处理内置钩子。例如,它知道useState()总是返回相同的setter函数实例,因此您不必将其包括在useEffect()依赖项数组中({ {1}}电话)。

但是,皮棉规则不知道关于自定义钩子,无论它们是来自库还是来自您自己的钩子。因此,由于dispatch是一个自定义钩子,因此,棉绒规则必须假定useReducer()发生的任何变化都可以改变,并试图告诉您需要将其列出作为依赖项。

第二个答案是可以将新的商店引用传递给useDispatch(),在这种情况下,dispatch钩子将返回另一个<Provider>

因此,实际上,在deps数组中不包含store.dispatch的情况下,代码可以正常运行,因为您的应用程序几乎始终都在使用同一商店实例。但是,由于皮棉规则不知道这一点,因此您可能仍需要将其包括在列表中以使其变得安静。

(来源:我是Redux的维护者,并帮助指导了我们的hooks API的实现:))