【发布时间】:2020-08-17 01:56:09
【问题描述】:
我在 React 函数组件中使用 useEffect,如下所示:
useEffect(() => {
const handleRouteChangeComplete = () => {
window.scrollTo(0, 0);
userInterface.dispatch(closeNavigation());
};
Router.events.on('routeChangeComplete', handleRouteChangeComplete);
}, []);
useEffect 上的第二个(数组)选项给了我以下 linting 错误:
React Hook useEffect has a missing dependency: 'userInterface'. Either include it or remove the dependency array. eslint(react-hooks/exhaustive-deps)
我认为 linting 错误中的任何一个选项都不正确。
- 我只想初始化一次事件监听器。
- 如果我删除数组选项,
useEffect将表现得像componentDidUpdate并且可以多次执行代码 - 如果我添加
userInterface作为对useEffect的依赖项,如果上下文更新,它也会多次执行代码
我是在这里遗漏了什么还是 linting 迫使我写出不正确的逻辑?
我会在这个实例中禁用规则,但我的应用中有 4 个其他实例出现类似错误。
【问题讨论】:
-
你打算用另一个实例替换当前的
userInterface吗?如果您不打算替换它,则将其用作依赖项不会在第一次之后调用useEffect。 -
@OriDrori
userInterface.state可能会改变,但userInterface.dispatch不应该。但是按照我当前代码的编写方式,如果userInterface.state发生更改,将userInterface作为依赖项添加到useEffect将导致代码再次执行。
标签: reactjs react-hooks eslint eslint-config-airbnb