React Hooks 无限循环与数组
React Hooks infinite loop with Array
当我在 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
,它将被无限调用。
另一方面,字符串的浅比较不会导致无限循环,因为它们是 "shallow equal"。
[1,2,3]!==[1,2,3]
而 "123"==="123"
当您将数组设置为依赖项并使用该数组作为状态时,数组 "change" 一切 setSeries
依次触发渲染依次触发 useEffect
进而触发 setSeries
依此类推
当我在 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
,它将被无限调用。
另一方面,字符串的浅比较不会导致无限循环,因为它们是 "shallow equal"。
[1,2,3]!==[1,2,3]
而 "123"==="123"
当您将数组设置为依赖项并使用该数组作为状态时,数组 "change" 一切 setSeries
依次触发渲染依次触发 useEffect
进而触发 setSeries
依此类推