setState没有更新状态,即使在其回调react-native中也是如此

时间:2018-05-12 07:02:10

标签: javascript reactjs react-native

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

2 个答案:

答案 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未在您的代码段中的任何位置定义。如果您没有在代码中的某个位置定义共享代码段不包含的内容,则可以,但您也需要修复该部分。