繁体   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