使用vuex持久状态将数据保存到本地存储

时间:2019-01-28 10:23:11

标签: vuejs2 vuex nuxt.js vuex-modules

我当前正在使用此插件vuex-persistedstate

,我想将其与Nuxt应用程序的Vuex模块一起使用。

如果成功的话,基本上我有一个登录模块,然后将来自响应的authToken存储到localStorage

这是我的代码:

import axios from "axios";
import createPersistedState from 'vuex-persistedstate';

export const state = () => ({
  signInAttrs: {
    email: "",
    password: ""
  },
  authToken: ""
});

export const mutations = {
  SET_AUTH_TOKEN(state, token) {
    state.authToken = token;


    createPersistedState({
      key: 'admin-auth-key',
      paths: [],
      reducer: state => ({
        authToken: '123123123'
      })
    })(store);
  }
};

export const actions = {
  signInAdmin({ commit }, context) {
    return axios.post(`${process.env.BASE_URL}/sign_in`, {
      email: context.email,
      password: context.password
    }).then(response => {
      commit('SET_AUTH_TOKEN', response.data.headers.token);
    }).catch(error => {
      console.log(`failed ${error}`);
    });
  }
};

export const getters = {
  signInAttrs(state) {
    return state.signInAttrs;
  },
  authToken(state) {
    return state.authToken;
  }
};

在突变内部,有SET_AUTH_TOKEN从API接收令牌作为参数。如何将其保存到localStorage?

1 个答案:

答案 0 :(得分:2)

我认为您误解了vuex-persistedstate的用法。将其添加到Store插件(plugins: [createPersistedState()])后,它将在每次突变提交时自动使用您的商店副本更新localStorage变量vuex(请参见example)。因此,您的令牌应该已经在vuex.authToken中的localStorage内部。

如果您只想存储具有自定义名称的变量,则可以不使用插件来进行操作:localStorage.setItem('key', 'value')。参见this question

相关问题