【发布时间】:2020-03-07 04:21:28
【问题描述】:
当以下代码在 React 组件中运行时,会导致死循环。为什么将数组作为依赖项传递给useEffect(在本例中为args)会导致这种情况发生?如何阻止无限循环的发生?代码应该只运行一次。
我读到我可以使用 [args.length] 来阻止这种情况的发生,但是 ESLint 规则 react-hooks/exhaustive-deps 会引发错误,所以我想避免这样做。
import React, { useEffect, useState } from 'react';
export default function Home() {
const args = ['a'];
const [value, setValue] = useState(['b']);
useEffect(() => {
setValue(['c']);
}, [args]);
console.log('value', value);
}
请注意,在上面的代码中,我什至在 useEffect 回调中根本没有使用或修改 args。
如果我将args 的值更改为一个字符串,比如const args = 'a',那么就没有无限循环。所以当依赖是一个数组的时候,问题似乎就出现了。
【问题讨论】:
-
你能解释一下你想要什么吗?由于 args 不再更改,因此您的代码只能运行一次。让我知道您的目的,以便我可以帮助您。
-
@Shildra 我希望代码只运行一次,但它在无限循环中运行。
标签: javascript reactjs loops state react-hooks