Hook 为什么在地图中设置状态挂钩只设置最后一个对象?

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

我在子组件中有两个组件,一个设置父组件的状态

子组件具有useEffect来触发父组件中的以下方法

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)
    });
});