Javascript React必须使用setTimeout调用才能正确更新视图
我正在对此文件进行修改,以将Javascript React必须使用setTimeout调用才能正确更新视图,javascript,reactjs,settimeout,Javascript,Reactjs,Settimeout,我正在对此文件进行修改,以将维度组件移出到父组件 我注意到一件奇怪的事情,我必须调用setTimeout(this.updateRows,0)而不是this.updateRows(),才能正确更新视图 知道为什么会这样吗?好的,setTimeout(551;,0)只是使函数调用异步(即允许并发执行以提高性能)。为什么这有助于正确渲染视图?我问这个问题是为了避免“巧合编程”。在这个例子中,它可能不是关于“并发执行”的,而是关于程序的。setTimeout调用从当前调用堆栈中删除函数执行,并向消息队
维度
组件移出到父组件
我注意到一件奇怪的事情,我必须调用setTimeout(this.updateRows,0)
而不是this.updateRows()
,才能正确更新视图
知道为什么会这样吗?好的,
setTimeout(551;,0)
只是使函数调用异步(即允许并发执行以提高性能)。为什么这有助于正确渲染视图?我问这个问题是为了避免“巧合编程”。在这个例子中,它可能不是关于“并发执行”的,而是关于程序的。setTimeout
调用从当前调用堆栈中删除函数执行,并向消息队列中添加一个条目。在队列中的下一条消息开始执行之前,当前正在执行的堆栈将运行到完成
我不知道为什么在这个特定的实例中需要这样做-必须在当前堆栈中设置某种状态,updateRows
才能产生所需的结果。这是因为
由于您正在读取updateRows
函数中的this.state
,因此在实际更新状态之前,它不会工作。
像您那样使用setTimeout
,是允许状态更新的一种方法<代码>设置状态将完成,然后在下一帧中执行更新操作
更好的方法是使用回调参数setState
this.setState({dimensions: updatedDimensions}, () => {
this.updateRows();
});
另一种选择是保留对象中的任何状态更改,并将其传递到函数中,而不是直接从this.state
中读取,但这可能会导致更大的复杂性