Reactjs 如何在第一次设置状态然后使用状态时停止InFite循环中的useEffect
关于这个话题已经有很多问题了,但我看不出两者都设置了状态,然后使用相同的状态 我在第一次运行时设置状态,然后通过数组将状态传递回。理论上,这应该只运行2次,一次是当Reactjs 如何在第一次设置状态然后使用状态时停止InFite循环中的useEffect,reactjs,react-hooks,Reactjs,React Hooks,关于这个话题已经有很多问题了,但我看不出两者都设置了状态,然后使用相同的状态 我在第一次运行时设置状态,然后通过数组将状态传递回。理论上,这应该只运行2次,一次是当data1和data2为空时,另一次是当它们更改为updated时 以这种方式传入状态将使其当前永远运行。我该怎么阻止这一切?数据没有更新,为什么会反复运行?还是换一种方式 我不希望每次进行更改时都运行combineData,因为这是不必要的。我希望这只在加载时发生(就像我在这里尝试做的那样) 您正在更新状态,但是您正在使用这些状态作
data1
和data2
为空时,另一次是当它们更改为updated时
以这种方式传入状态将使其当前永远运行。我该怎么阻止这一切?数据没有更新,为什么会反复运行?还是换一种方式
我不希望每次进行更改时都运行combineData
,因为这是不必要的。我希望这只在加载时发生(就像我在这里尝试做的那样)
您正在更新状态,但是您正在使用这些状态作为依赖项,因此它成为一个无限循环 如果只想使用一次,请删除依赖项
useEffect(() => {
// your codes.
},[])
如果不是,那么就没有必要使用状态,而是使用局部变量
useEffect(() => {
///SET STATE
const initiate = async () => {
const local1 = await getData1()
const local2 = await getData2()
combineData(local1, local2)
}
initiate();
}, []) // pass in an array as a second argument
const combineData = (...args) => {
let data = [...args].flat()
setData(data)
}
等待所有承诺完成,然后从依赖关系数组中删除data1和data2。e、 g.
Promise.all([promise1,promise2])。然后(results=>{/*combine here*/})
,结果将是一个数组,格式为[promise1Result,promise2Result]
这是一个好的简单解决方案(第二部分),它解决了我的问题。
useEffect(() => {
///SET STATE
const initiate = async () => {
const local1 = await getData1()
const local2 = await getData2()
combineData(local1, local2)
}
initiate();
}, []) // pass in an array as a second argument
const combineData = (...args) => {
let data = [...args].flat()
setData(data)
}