componentDidMount和componentDidUpdate错误:无法在调度中间调度

时间:2017-07-06 04:25:51

标签: javascript reactjs

我收到错误

Invariant Violation: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.

使用2生命周期反应方法来调用API。

componentDidMount() {
    const action_id = this.context.router.params.action_id
    if(action_id) {
        this.getMsg(action_id)
    }
}

componentDidUpdate(prevContext) {
    const action_id = this.context.router.params.action_id
    if(!isEqual(prevContext.params.action_id, action_id)){
        this.getMsg(action_id)
    }
}

需要上面的步骤,componentDidMount中的代码调用端点来获取列表msg,componentDidUpdate检测用户是否单击返回或导航,然后调用Api。我不知道如何解决它。

1 个答案:

答案 0 :(得分:0)

调度程序无法在操作中间发送另一个操作。 为避免这种情况,您可以在动作创建者中使用Promise

例如:

 return new Promise.Promise(function (resolve, reject) {
            resolve();
        }).then(() => {
            dispatcher.dispatch(your action );
        }).catch();