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

然后需要将生成的dispatch函数列为所有useEffectuseMemo等钩子(Hook)的依赖项。为什么是这样?

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

在任何情况下dispatch函数都可能改变吗?

最佳答案

有两个答案。

首先,据我所知,React“钩子(Hook)规则” ESLint规则知道如何专门处理内置钩子(Hook)。例如,它知道useState()总是返回相同的setter函数实例,因此您不必将其包含在useEffect()依赖项数组中(通过dispatch调用获取useReducer()函数的同上)。

但是, Lint 规则不知道自定义钩子(Hook),无论它们来自库还是来自您自己的钩子(Hook)。因此,由于useDispatch()是一个自定义钩子(Hook),因此lint规则必须假定dispatch所发生的一切都可能发生变化,并尝试告诉您需要将其列为依赖项。

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

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

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

关于javascript - 在什么情况下Redux dispatch 会发生变化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56795607/

10-12 07:27