【问题标题】:How to have a callback function after setting the state for each individual loop in a forEach loop?在为 forEach 循环中的每个单独循环设置状态后如何具有回调函数?
【发布时间】:2018-12-19 17:55:43
【问题描述】:

在设置状态后尝试在每个单独的循环之后回调一个函数。但是回调将使用最近的状态而不是两个状态执行两次。

onAddClick = () => {
    this.state.tempAddList.forEach((id) => {
        console.log("add", id);
        this.setState({modInfo: {...this.state.modInfo, modId: id}},()=>this.addModifier());
    });

};
addModifier = () => {
    console.log(this.state.modInfo);
    EdmApi.insertModifier(this.state.modInfo)
        .then(res => console.log(res))
        .catch(err => console.log(err));

};

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    this.state 不应与setState 一起使用,因为状态更新是异步的。这可能会导致竞争条件,这就是这里的问题。

    这就是updater function 的用途:

    this.state.tempAddList.forEach((id) => {
        this.setState(
          state => ({modInfo: {...state.modInfo, modId: id}}),
          ()=>this.addModifier())
        ;
    });
    

    【讨论】:

    • 您甚至可以将forEach 循环放入更新程序中
    • 有可能,取决于代码应该如何工作。目前 addModifier 被多次调用,这可能是可取的行为,也可能不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2021-06-22
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多