重新加载页面时Redux存储更改

时间:2018-01-23 20:34:18

标签: reactjs redux store

我正在使用react redux实现两种不同类型用户的登录。 这是我的登录方法:

export const login = (credentials) => (dispatch) =>
    api.user.login(credentials).then(user => {
      localStorage.userJWT = user.token;
      localStorage.userEmail = user.email;
      localStorage.userId = user.id;
      localStorage.surname = user.surname;
      localStorage.type = user.type;
      dispatch(userLoggedIn(user));
});
  1. 对于第一类用户,我从后端返回:令牌,电子邮件,身份证,姓氏。
  2. 对于第二类用户,我从后端返回:token,email,id,type。
  3. 我做了一些第二类用户无法访问的安全路由。 因此,如果返回变量surname,我将为该用户定义特定路由。

    如果返回type变量,它会正确显示链接和redux存储中的所有内容。但是,如果我重新加载页面,则会自动将变量type更改为undefined surname

    即使我重新加载页面,这也是我试图在存储中保存redux状态的地方。     const store = createStore(        rootReducer,        composeWithDevTools(applyMiddleware(形实转换))      );

     if(localStorage.userJWT && localStorage.userEmail && localStorage.userId && localStorage.type){
       const user = { token: localStorage.userJWT, email: localStorage.userEmail, id: localStorage.userId, type: localStorage.type};
       store.dispatch(userLoggedIn(user));
     }
     if(localStorage.userJWT && localStorage.userEmail && localStorage.userId && localStorage.surname){
       const user = { token: localStorage.userJWT, email: localStorage.userEmail, id: localStorage.userId, surname: localStorage.surname};
       store.dispatch(userLoggedIn(user));
     }
    

    你能否说明为什么它不遵循我的if声明。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

Redux存储/状态在重新加载时重新初始化。您可以将身份验证信息保存在本地存储中,然后将其拉出以用作初始状态。这样,即使重新加载,您的Redux状态也将始终具有该身份验证信息。

function reducer (state = initState(), action) {
    return state
}

function initState () {
    return { 
        token: localStorage.userJWT, 
        email: localStorage.userEmail, 
        id: localStorage.userId, 
        surname: localStorage.surname
    }
}

或者,如果您希望重新加载整个Redux状态,可以尝试实现一些执行此操作的程序包,例如redux-persist