当我在 React 的 useEffect 钩子中将数组分配给状态时,我有一个无限循环,我不确定为什么,因为我将状态series
添加为依赖项。
const [series, setSeries] = useState([]);
useEffect(() => {
setSeries([1, 2, 3, 4]);
}, [series]);
具有字符串的相同代码不会创建无限循环
const [series, setSeries] = useState([]);
useEffect(() => {
setSeries('No Infinite Loop');
}, [series]);
您在钩子中添加了系列降级,并且您正在更新系列,因此每当系列更新该钩子时,都会调用 . 所以,它进入了无限。
const [series, setSeries] = useState([]);
useEffect(() => {
setSeries([1, 2, 3, 4]);
}, []);
React 在涉及状态时会进行浅相等性检查,除非另有定义。 当你这样做setSeries([1, 2, 3, 4]);
时,你每次调用这个效果时都会[1, 2, 3, 4]
创建数组,并且由于你的useEffect
依赖于series
,它将被无限调用。
另一方面,字符串的浅层比较不会导致无限循环,因为它们是"浅相等的"。
[1,2,3]!==[1,2,3]
"123"==="123"
当您将数组设置为依赖项并将该数组用作状态时,数组会在setSeries
时"更改"所有内容,进而触发渲染,进而触发useEffect
进而触发setSeries
依此类推