javascript - 同时调用相同的 this.setState 函数
问题描述
我有一个问题,即 setState 被各种子组件同时调用
这是一些过于简单的代码:
var Content = React.createClass({
updateElements: function(element) {
elements = [].concat(this.state.elements)
elements.push(element)
this.setState({ elements })
}
render: function() {
elements = ["a", "b"];
return (
<div>
<Element updateElements={this.updateElements} data={elements[0]} />
<Element updateElements={this.updateElements} data={elements[1]} />
</div>
);
}
});
var Element = React.createClass({
componentDidMount: function() {
this.props.updateElements(this.props.data)
}
render: function() {
return (
<div>
{this.props.data}
</div>
);
}
});
ReactDOM.render(
<Content />,
document.getElementById('container')
);
我可以在再次更新之前以某种方式等待之前的状态设置吗?
解决方案
我不完全确定,但这应该可以。如果你这样做 setState 这样
this.setState((prevState, props) => {
return {elements: [...prevState.elements, element]};
});
它不会是同步的,但它应该保留元素而不覆盖它(因为同时更新),因为它将取自 prevState。
推荐阅读
- fabricjs - Fabric JS 2.4.1 使用复制/粘贴示例时出现问题,对象卡在剪贴板中
- service - 在一台机器上部署两个服务
- javascript - Javascript Vue 事件发出不值
- css - Button 组件的覆盖不会改变悬停颜色
- jsf - Jboss X JSF 实现版本矩阵是什么?
- asp.net - 使用gridview制作表格
- c# - 在 C# 中的组合逻辑上替代 if/else
- sql - 具有日期范围和分组依据的 SSRS 报告
- python - Django Rest 框架错误'django.core.urlsolvers'
- ansible - ansible add_host 从文件中设置变量