1
displayModal
的值始终为后面的值。可能是一种竞争条件。我呼叫updateModal
在setState
回调,所以不应该发生竞争条件。可能的竞态条件调用setState
addAccrual: function() {
console.log('setting modal to display true');
this.setState({displayModal: 1}, this.updateModal());
},
saveAddAccrual: function() {
console.log('setting modal to display false');
this.setState({displayModal: 0}, this.updateModal());
},
cancelAddAccrual: function() {
console.log('setting modal to display false');
this.setState({displayModal: 0}, this.updateModal());
},
updateModal: function() {
console.log("state of displayModal: " + this.state.displayModal);
if(this.state.displayModal){
console.log('showing modal');
$('#myModalOverlay').show();
$('#myReactModal').show();
}else{
console.log('hiding modal');
$('#myModalOverlay').hide();
$('#myReactModal').hide();
}
},
E.G.
设置模式,以显示真正的displayModal的
状态:0
隐藏模态
HTML/JSX
<button className="ay-btn" id="addAccrualButton" onClick={this.addAccrual}>Add Accrual</button>
<button className="btn" type="button" onClick={this.cancelAddAccrual}><i className="icon-remove"></i>Cancel</button>
<button className="btn-primary btn" type="button" onClick={this.saveAddAccrual}><i className="icon-white icon-ok"></i>Save</button>
由于多个'setState'调用可以合并为一个'setState'调用。换句话说,不是每个'setState'调用都能保证实际调用你的回调函数。 –
js是单线程的。没有比赛条件。 –
Myeah,事实证明我误解了“this.state的值不保证马上更新”。它是异步的,但它确保在操作完成并调用每个setState调用后调用回调函数。 –