简单解决vuex中刷新值不在的问题

2018-04-02  本文已影响89人  小陈陈酱

最近小用了一下vuex来进行状态管理。

需求

login之后,得到当前用户的id,然后再其他页面拿着这个id去进行其他请求

我的做法

在我的store里面是这样写的:

import * as types from '../mutation-types'
const state = {
  userId: ‘‘’’
}
const getters = {
  userId: state => state.userId
}
const mutations = {
  [types.SET_USER_ID] (state, id) {
    state.userId = id
  }
}
const actions = {
  setUserId: ({commit}, id) => commit(types.SET_USER_ID, id)
}
export default {
  state,
  getters,
  actions,
  mutations
}

mutaion-type.js里面

// login
export const SET_USER_ID = 'SET_USER_ID'

在页面上
html

<div class="item pointer" @click="toNew(userId)">
        <img class="icon-item" src="/static/image/setting.svg">アカウント設定
      </div>

js

methods: {
      toNew (id) {
        this.$router.push({name: 'UserDetail', query: {userId: id}}) // 我需要跳转的页面
      }},
 computed: {
      ...mapGetters({
        userId: 'userId'
      })}

这时候有个问题了,id是取到,但是呢,我一刷新页面,数据就完全丢了。
google 了一下才发现我对vuex有点误解,以为它可以跨页面存储数据。
其实vuex解决的是跨组建的数据存储和共用问题,不是跨页面
这个是重点!!
所以如果要解决这个跨组建又跨页面的传递数据的话,需要借助外部储存,如localStorage或者sessionStorage来储存。根据自己的需求选择啦。
其实很简单,在取到id的时候,把id先存到内存里,然后id的初始值从存储里面取。
代码如下:

const state = {
  userId: window.localStorage.getItem('userId') //这里写初始值
}
const getters = {
  userId: state => state.userId
}
const mutations = {
  [types.SET_USER_ID] (state, id) {
    state.userId = id
    window.localStorage.setItem('userId', id) // 在mutation里面取数据的时候就先去set一次
  }
}

就是这么的简单。只加了2行代码。

上一篇下一篇

猜你喜欢

热点阅读