React redux prev state忽略并重写下一个状态

时间:2018-03-06 12:42:09

标签: reactjs react-native redux react-redux

在一个例子中,我的应用程序出了什么问题,我无法弄清楚如何修复它以及它为什么会发生。 我做了一个简单的API调用来获取一些数据

    dispatch(isLoadingData(true));
        api({
              method,
              url,
              headers: { Authorization: `JWT ${APP.token}` }
            })
              .then(async (response) => {
                return resolve(dispatch(await updateData(response)));
              }).catch(reject);
          }).catch(async (err) => { 
              dispatch(isError(err));
              dispatch(await isLoadingData(false)); 
              throw err; 
          });

如果API响应具有401状态代码,则通过调用下一个操作启动注销过程。

 case LOGOUT_USER: {
          Actions.main({ type: 'reset' });
          return {
            ...INITIAL_STATE,
          };
        }

将用户缩减器恢复为

{ user: '', token: '' };

(它在Promise在upper函数中返回响应之前调用)。所以序列看起来像这样

1)isLoadingData(true)

2)logoutUser()(这会清除用户数据)

3)isError(错误)(这又有用户和令牌)

4)isLoadingData(false)

因此,用户无法注销。

1 个答案:

答案 0 :(得分:0)

只需添加另一个

.then(response => dispatchActionAfterActualLogoutWasMade())

以便在初始注销请求完成后调度操作

在您收到服务器的响应后,会向reducer发送操作以清除应用状态。