我是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中看到物种或农民。
当用户只选择一列(物种或农民)时,它可以正常工作。但是当用户选择多个列(物种和农民)时,它仅为农民显示唯一值。
答案 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()。
希望这有帮助