这是我面临的问题,它在componentDidMount外部运行良好,并且在渲染视图后在函数中调用时返回确切的数字:
componentDidMount = () => {
var obj = snapshot.val()
var favoritesList = []
var keys = []
for(let a in obj){
favoritesList.push(obj[a])
keys.push(a)
}
this.setState({
favoritesList:favoritesList,
keys:keys,
})
console.log(this.state.keys.length)
console.log(this.state.favoritesList.length)
}
我的目标是在列表为空时显示文本组件
if (this.state.favoritesList.length === 0)
this.setState({empty: true})
...
{this.state.empty ?
<Text>
Oh such empty!
</Text>
: null }
调用此函数时,我有点困惑:
test(item) {
console.log(item.index)
console.log(this.state.keys.length)
}
答案 0 :(得分:4)
setState
是异步的。这意味着,要访问最新消息,需要在回调内部进行操作:
this.setState({
favoritesList,
keys,
}, () => {
console.log(this.state.keys.length)
console.log(this.state.favoritesList.length)
});
如果我正确解释了您的代码,则您是在setState
内部调用render()
,这绝对是不可接受的。