我有一个复选框,它在事件发生时调用两个函数,在第一个函数中,我要更改组件的状态,在第二个函数中,我要调用该状态以查看它是否已被第一个函数更改, 通过console.log显示该组件的状态,我看到仅在第二次单击复选框后才显示更改,因此,首先单击显示的空白数据,然后再次单击数据并在控制台上显示更改,请您帮我理解为什么有时间滞后吗?
这是我的代码:
<CheckBox onPress={() => {this.treggerCheckBoxcallback(item); this.editeTask()}} />
//function 1
treggerCheckBoxcallback = tsk => {
let currentTasks = tsk;
this.setState({ currentTask : currentTasks});
};
// function 2
editeTask = () => {
console.log(this.state.currentTask);
}
答案 0 :(得分:3)
函数setState
是异步的,因此您的控制台日志显示了在setState真正被调用之前的状态。为了避免这种行为,您可以像这样使用setState:
this.setState({ data: yourData }, () => {
console.log(this.state.data)
// code called after the setState is finished. (callback)
})