簡體   English   中英

為什么我的 React setstate 沒有立即更新?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM