Reactjs 反应:向父级传递道具返回
首先让我把我的代码放在这里,我会解释发生了什么 Parent.jsReactjs 反应:向父级传递道具返回,reactjs,state,parent,Reactjs,State,Parent,首先让我把我的代码放在这里,我会解释发生了什么 Parent.js callback = (id) => { this.setState({des: id}); console.log(this.state.des); } //on my render i have this when i call my child component <Child callback={this.callback}/> 当i console.logon我的子组件时,它返回我
callback = (id) => {
this.setState({des: id});
console.log(this.state.des);
}
//on my render i have this when i call my child component
<Child callback={this.callback}/>
当i console.logon我的子组件时,它返回我想要传递的数据,但当我在父组件上的Calback中执行此操作时,它返回,我不知道为什么会发生这种情况。发生这种情况的原因是因为setState是一个异步函数。当您尝试记录this.state.des时,状态尚未设置。如果您希望控制台记录您的状态,以查看它是否已按预期设置,那么您要做的是将其记录在this.setState的回调中,以便在我们知道状态已设置后进行记录。在parent.js中尝试以下操作:
callback = (id) => {
this.setState({des: id}, () => {
console.log(this.state.des);
});
}
有关更多详细信息,请参阅for setState对setState的调用是异步的,因此如果在调用setState后直接访问更新的状态,则可能无法读取更新的状态。由于这个setStateupdater[,callback]实际上公开了一个回调,该回调可用于依赖于正在进行的状态更新的操作。这一点在本节中进行了解释
在您的例子中,像这样调整回调函数
callback=id=>{
this.setState{des:id},=>{
console.logthis.state.des;
};
}
我们应该做到这一点
如果您想更多地了解setState异步背后的原因,即使一开始可能有点混乱,比如在您的案例中,您应该检查一下,尤其是
callback = (id) => {
this.setState({des: id}, () => {
console.log(this.state.des);
});
}