如何从action中调用存储变量?

时间:2018-04-24 13:33:47

标签: javascript reactjs react-native axios

我有authActions.js中生成的变量user_id和token,但我需要在不同的js文件中重复使用它们。

如何在生成后将其存储在会话中,并在注销时将其删除?

export function loginUser(email, password) {
  return function (dispatch) {
    return axios.post(SIGNIN_URL, { email, password }).then((response) => {
      var { user_id, token } = response.data;
      dispatch(authUser(user_id, token)); // here I dispatch the values to authUser const in the same file
      onSignIn(user_id);
    }).catch((error) => {
      dispatch(addAlert("Could not log in."));
    });
  };
}

export const authUser = (user_id, token) => {
  return {
    type: 'AUTH_USER',
    user_id,
    token
  }
}

我的authReducer.js

var defaultState = {
  user_id: undefined,
  token: undefined
}

module.exports = (state=defaultState, action) => {
  switch(action.type) {
    case 'AUTH_USER':
      return {
        user_id: action.user_id,
        token: action.token
      }

    case 'UNAUTH_USER':
      return {
        user_id: undefined,
        token: undefined
      };

    default:
      return state;
  }
}

这是我的jobsAction.js,我想使用它们

export function createJob(title, company, avatar, description ) {
  return function (dispatch) {
      return axios.post(JOBS_URL(user_id), { title, company, avatar, description }, {
        headers: { authorization: token }
      }).then((response) => {
        dispatch(addJob(response.data.job));
      }).catch((err) => {
        console.log(err);
        dispatch(addAlert("Couldn't create job."));
      });
  };
}

2 个答案:

答案 0 :(得分:1)

您正在操作创建者中获取它,因此使用userId调度操作,将其存储在redux状态。然后你就可以从那个状态获得它并在任何你想要的地方使用。

答案 1 :(得分:0)

您可以使用localStorage。对于持久性项目,您可以使用localStorage.set(key,value)。  您可以检索localStorage.get(key)localStorage.remove(key)之类的值以进行删除。

您可以阅读文档:https://developer.mozilla.org/en/docs/Web/API/Window/localStorage