这里user_res已更新但不是状态,我也尝试将此函数绑定到此。但结果相同:(
let user_res = usr_vote;
user_res.map((vote)=>{
if(vote.id==dat_id){
vote.status = stats
}
})
console.log("update user response:",user_res)
this.setState({user_response:user_res},()=>{
console.log("but this is not uodating : ",this.state.user_response)
});
答案 0 :(得分:2)
我不认为即使user_res
正在更新。 map
不会更新原始变量。您需要将.map
的值分配给某些内容。
user_res = user_res.map((vote)=>{
if(vote.id==dat_id){
return {...vote, status: stats}
} else {return vote}
})
答案 1 :(得分:2)
如果您选中documentation form Array.prototype.map()
,您会看到map
没有修改原始数组,它会返回一个包含已修改项目的新数组。
map()
方法创建一个新数组,其结果是调用a 为调用数组中的每个元素提供了函数。
因此,根据该信息,您可以相应地修改代码,
// create a new array with the modified items
let user_res = usr_vote.map((vote) => {
if(vote.id == dat_id){
vote.status = stats
}
});
// update state with the new array
this.setState({user_response:user_res},()=>{
console.log("but this is not uodating : ",this.state.user_response)
});
PS: stats
未在您的代码段中的任何位置定义。如果您没有在代码中的某个位置定义共享代码段不包含的内容,则可以,但您也需要修复该部分。