使用 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(). 我确实找到了 _[关于“exhaustive-deps” lint 规则
useReducer()
其中一个可能的解决方案是You can always // eslint-disable-next-line react- hooks/exhaustive-deps if you think you know what you're doing.我对自己正在做的事情没有信心,所以我还没有尝试实施它。
You can always // eslint-disable-next-line react- hooks/exhaustive-deps if you think you know what you're doing.
我有这个当前的设置, React hook useEffect 永远/无限循环连续运行 ,唯一的评论是useCallback()我不熟悉的。
useCallback()
我目前的使用useEffect()方式(我只想在开始时运行一次,类似于componentDidMount()):
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 }); };
如果您没有在效果之外的任何地方使用 fetchBusinesses 方法,您可以简单地将其移动到效果中并避免警告
useEffect(() => { 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 }); }; fetchBusinesses(); }, []);
但是,如果您在渲染之外使用 fetchBusinesses,则必须注意两件事
fetchBusinesses
总而言之,我会说,如果您在fetchBusinesses外部使用,useEffect则可以禁用规则,// eslint-disable-next- line react-hooks/exhaustive-deps否则您可以将方法移动到 useEffect 内部
useEffect
// eslint-disable-next- line react-hooks/exhaustive-deps
要禁用规则,您可以这样编写
useEffect(() => { // other code ... // eslint-disable-next-line react-hooks/exhaustive-deps }, [])