【发布时间】:2019-10-16 14:47:00
【问题描述】:
使用 React 16.8.6(在以前的版本 16.8.3 上很好),当我尝试防止获取请求上的无限循环时出现此错误:
./src/components/BusinessesList.js
Line 51: React Hook useEffect has a missing dependency: 'fetchBusinesses'.
Either include it or remove the dependency array react-hooks/exhaustive-deps
我一直无法找到停止无限循环的解决方案。我想远离使用useReducer()。我确实找到了这个讨论[ESLint] Feedback for 'exhaustive-deps' lint rule #14920,其中一个可能的解决方案是You can always // eslint-disable-next-line react-hooks/exhaustive-deps if you think you know what you're doing. 我对我正在做的事情没有信心,所以我还没有尝试实现它。
我有这个当前设置,React hook useEffect runs continuously forever/infinite loop,唯一的评论是关于我不熟悉的 useCallback()。
我目前如何使用useEffect()(我只想在开始时运行一次,类似于componentDidMount()):
useEffect(() => {
fetchBusinesses();
}, []);
const fetchBusinesses = () => {
return fetch("theURL", {method: "GET"}
)
.then(res => normalizeResponseErrors(res))
.then(res => {
return res.json();
})
.then(rcvdBusinesses => {
// some stuff
})
.catch(err => {
// some error handling
});
};
【问题讨论】:
-
由于这个问题的访问量很大,这里有一个指向Dan Abramov's blog 的链接,他在其中详细解释了 useEffect 及其依赖关系。
-
还有一个特性请求,所以 React 改进了 useEffect API 来避免这个问题,清楚地将效果触发器与效果依赖项分开:github.com/facebook/react/issues/22132 由于 Next.js 默认启用了 linting,所以这个警告必须出现百万次世界各地的一天,这必须以某种方式停止。
-
同意,这在官方文档中完全不清楚。像 React 这样的库不应该需要论坛和博客文章来使其工作。
标签: reactjs eslint create-react-app react-hooks