setState没有按预期更新

时间:2017-08-23 13:08:35

标签: javascript reactjs

我是ReactJS初学者,这是我的代码。

for (var key in getContentState){
    var string=getContentState[key]
    if(highlighted_cols.includes(Object.keys(string).toString())){
        arr=Object.values(string)
        this.setState({
            uniqueValues : arr
        },()=>{
            console.log("update")
            console.log(this.state.uniqueValues)
        })
    }
}

getContentState是一个看起来像的对象 screenshot of getContentState

每次密钥与highlighted_cols匹配时,我都会尝试更新uniqueValues。 highlight_cols由用户选择,在这种情况下,您可以在getContentState中看到物种或农民。

当用户只选择一列(物种或农民)时,它可以正常工作。但是当用户选择多个列(物种和农民)时,它仅为农民显示唯一值。

2 个答案:

答案 0 :(得分:1)

看起来您通过更新uniqueValues循环内的状态来覆盖状态(for)键。您是否尝试仅更新状态一次

类似的东西:

let result = []
for (var key in getContentState) {
  var string = getContentState[key]

  if (highlighted_cols.includes(Object.keys(string).toString())) {
    result = [
      ...result,
      Object.values(string),
    ]
    // or result.push(Object.values(string))
}

this.setState({
  uniqueValues : result
}, () => {
  console.log('update')
  console.log(this.state.uniqueValues)
})

答案 1 :(得分:0)

我认为这是由于一些反应优化,或者更简单地说,状态在渲染完成之前被更改,而结束状态不包含第一个值。 你不应该在for循环中调用setState()。

我建议你准备一个更新状态的新对象,然后在for循环结束后调用setState()。

希望这有帮助

相关问题