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調用後調用回調函數。 –