Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应:向父级传递道具返回_Reactjs_State_Parent - Fatal编程技术网

Reactjs 反应:向父级传递道具返回

Reactjs 反应:向父级传递道具返回,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我的子组件时,它返回我

首先让我把我的代码放在这里,我会解释发生了什么

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我的子组件时,它返回我想要传递的数据,但当我在父组件上的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); 
   });
}