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

Mic*_*rer 3 javascript reactjs redux react-redux

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

将所得dispatch然后功能需要被列为任何依赖关系useEffectuseMemo等钩。为什么是这样?

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

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

mar*_*son 5

有两个答案。

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

但是,皮棉规则知道自定义钩子,无论它们来自库还是来自您自己的钩子。因此,由于useDispatch()是自定义钩子,因此lint规则必须假设无论发生什么变化dispatch可以,并尝试告诉您需要将其列为依赖项。

第二个答案是可以将新的商店引用传递给<Provider>,在这种情况下store.dispatchuseDispatch()挂钩会返回不同的内容。

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

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

  • 非常感谢您的详细解释! (3认同)