何时使用回调调用componentWillReceiveProps?

时间:2018-04-10 18:12:05

标签: reactjs react-native redux

我正在遇到看似可能是竞争条件的事情。基本上,我有一个登录呼叫,当它失败时将调用失败回调。这个失败回调(回调A)依次使用它自己的回调(回调B)调用一个函数。我所看到的是回调中的道具A在回调B之前有一个值,但是一旦回调B正在执行,它们的值已经改变为我预期的值。让我用一些伪代码来说明这一点:

login() {
    this.props.loginActions.login(this.failureCallback.bind(this))
}

loginActions

login(failureCallback) {
    return (dispatch, getState) {
        dispatch({
            types: [LOGIN_REQUEST, LOGIN_FAILURE, LOGIN_SUCCESS]
            failure: () => failureCallback()
        });
    };
}

然后,回到主屏幕,一旦我们失败,我就有这样的事情:

failureCallback() {
    // A
    const wasFail = this.props.isFail // This is false here, even though 
                                      // the LOGIN_FAILURE action is properly setting it to true

    if (wasFail) {
        // do stuff
    }

    functionWithCallback(() => {
        if (wasFail) {
            // B
            // do stuff
        }
    }
}

functionWithCallback(callback) {
    // C
    this.setState({...state, newStuffHere}, callback);
    // D
}

我正在做的是在mapStateToPropscomponentWillReceiveProps上添加日志,然后在ABC上添加日志语句。我所看到的是以下内容:

  1. mapStateToProps调用设置prop来纠正值
  2. 登录正在调用的A,显示错误的值
  3. 登录C称为
  4. 登录D称为
  5. 使用正确的值将状态映射到再次调用的道具
  6. 使用正确的值
  7. 调用componentWillReceiveProps
  8. 使用正确的值

    登录B

    在我看来发生的事情是,在调度动作的时候,React只知道回调A.所以,在给我的组件新的道具之前,它调用回调A.回调A然后调用回调B.回调A完成后,将调用componentWillReceiveProps,而仍未调用回调B.因此,当调用回调B时,组件现在使用正确的道具进行更新。

  9. 这对其他人来说是否正确?这是一个我面临的复杂问题,我试图在消除复杂性的同时尽力说明它。

    我还有一点要做,这三种类型是中间件的一部分,我们必须同时调度多个动作,基本上如果请求失败,它将正确地调度动作,如果请求成功,它将正确发送成功。从我所知道的,这是有效的,但是,如果我上面描述的情况不是React的行为,我可以尝试提供有关我们的中间件正在做什么的更多信息。

0 个答案:

没有答案