[英]why my React setstate is not updating immediately?
這是我的 function
onSelectAction = (x, o) => {
var { takeActionsOptions } = this.props.main
console.log(o, "onSelectAction")
var tempAction=_.cloneDeep(takeActionsOptions)
_.keys(tempAction).map(a => {
if(a === x.processCode) {
tempAction[a].map((b)=>{
b.isSelected = b.id === o.id
})
}
else{
tempAction[a].map((b)=>{
b.isSelected = b.id === 0
})
}
})
StoreActions.setState({ takeActionsOptions:tempAction});
this.onClickTakeAction(o, x)
}
tempAction 正在像我想要的那樣更改屬性。 但是當我嘗試更新商店時...這 { takeActionsOptions:tempAction} 不是第一次更新。 在所需位置上單擊 2-3 次后,這將得到更新。 我想在商店中立即更新,因為還有另一個 function 從商店中獲取數據並執行另一個操作。
這是我的另一個 function,它正在使用商店中的“takeActionsOptions”。 所以如果 function 沒有更新那么這個 function 就不能正常工作
onClickTakeAction = (o, x) => {
var { takeActionsOptions=[] } = this.props.main
var selectedAction = takeActionsOptions[x.processCode].find(a => a.isSelected)
if (selectedAction.id === 0) {
hydro.msg.info("Please select an option.")
return;
}
var tempAction=_.cloneDeep(takeActionsOptions)
_.keys(tempAction).map(a => {
tempAction[a].map((b)=>{
b.isSelected = b.id === 0
})
})
this.setState({takeActionsOptions:tempAction})
switch (selectedAction.id) {
case 1:
var userName = somecode.userName;
if (userName.toUpperCase() === x.userName.toUpperCase()) {
Actions.deleteSelectedProcess(x);
}
else {
somecode.info("Not your Process")
}
break;
case 2:
Action.downloadLogs(x);
break;
}
}
var tempAction=_.cloneDeep(takeActionsOptions)
cloneDeep function 在這里做什么? 如果它做任何API calling/Getting data from the server,你需要稍等片刻才能拿到數據。 同時,您可以禁用該按鈕並顯示一些加載程序以進行交互。
如果您使用 loadash 深度復制 object,據我所知,loadash 函數需要很長時間才能完成,具體取決於您嘗試復制的 CPU 或 object。 因此,請稍等片刻,然后檢查它是否正在更新。 如果它正在更新,那么您應該在此之前禁用該按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.