Hook 为什么在地图中设置状态挂钩只设置最后一个对象?
我在子组件中有两个组件,一个设置父组件的状态 子组件具有useEffect来触发父组件中的以下方法Hook 为什么在地图中设置状态挂钩只设置最后一个对象?,hook,setstate,react-admin,Hook,Setstate,React Admin,我在子组件中有两个组件,一个设置父组件的状态 子组件具有useEffect来触发父组件中的以下方法 const[approved,setAproved]=useState([]); useffect(()=>{ console.log(JSON.stringify(已批准)) },[核准]) const setapprovedamount=(id,approvedAmount)=>{ 如果(批准的长度!==0) { //如果孩子跑3次 //这条线跑了三次 console.log(“使用“+id
const[approved,setAproved]=useState([]);
useffect(()=>{
console.log(JSON.stringify(已批准))
},[核准])
const setapprovedamount=(id,approvedAmount)=>{
如果(批准的长度!==0)
{
//如果孩子跑3次
//这条线跑了三次
console.log(“使用“+id+”和金额“+approvedAmount设置为已批准”)
//但这一行只更新最后一个对象
setAproved(
已批准。地图(项目=>
(item.id==id)
?{…项目,批准总额:批准金额}
:项目
)
)
}
其他的
{
setAproved(已批准=>[…已批准{
id:id,
批准总额:批准金额
}] )
}
}
useffect(()=>{
console.log(JSON.stringify(已批准))
},[approved])
因为它的工作原理
如果您想通过setState
触发多个链接状态更新,则需要让组件在每次状态更新时完成其循环-首先要做的事情
因此,基本的解决方案是使用setTimeout
调用来委托每个状态更新,让每个函数调用完成一个组件,整个生命周期
setTimeout(function() {
setState(firstState)
setTimeout(function() {
setState(secondState)
});
});