登录后用户信息存储vuex,刷新数据丢失

结论:方法很多基本上都是要借助于localStorage或者sessionStroage来存放

①sessionStorage

  刷新浏览器页面,以前堆栈申请的内存被释放,这就是浏览器的运行机制。

  将接口返回的数据保存在vuex的store里,也将这些信息也保存在sessionStorage里。vuex中的变量是响应式的而sessionStorage不是,当改变vuex中的状态组件会检测到改变,而sessionStorage就不会了,页面要重新刷新才可以看到改变,所以应让vuex中的状态从sessionStorage中得到,这样组件就可以响应式的变化。

  还可以用 localStorage,但是它没有期限;所以常用的还是sessionStorage,当浏览器关闭时会话结束。

  sessionStorage 的生命周期是在浏览器关闭前。也就是说,在整个浏览器未关闭前,其数据一直都是存在的。

store.js

// index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    userInfo: JSON.parse(sessionStorage.getItem('userData')),
  },
  getters: {
    userInfo: state =>{
      if(!state.userInfo){
        state.userInfo = JSON.parse(sessionStorage.getItem('userData'))
      }
      return state.userInfo
    },
  },
  mutations: {
    getUserInfo(state,data){
      state.userInfo = data
      sessionStorage.setItem('userData', JSON.stringify(data))
    },
  },
  actions: {
    getUserInfo(context){
      context.commit('getUserInfo')
    },
  }
})

login.vue

<template>
<div>
  <input v-model="username" type="text">
  <input v-model="password" type="text">
  <div @click="login">点击登录</div>
</div>
</template>

<script>
import {mapState, mapMutations} from 'vuex'
export default {
  data(){
    return {
      userInfo: null,
      username: '',
      password: '',
    }
  },
  methods: {
    ...mapMutations(['getUserInfo','getNum']),
    login(){
      this.userInfo = {
        name: this.username,
        age: this.password,
        roles: ['create', 'delete']
      }
      // sessionStorage
      sessionStorage.setItem('userData', JSON.stringify(this.userInfo));  
      // vuex
      this.getUserInfo(this.userInfo)
      this.$router.push({
        path: '/test'
      })
    },
    addNum(){
      this.getNum()
    }
  }
}
</script>

<style>

</style>

退出

oueLogin(){
      sessionStorage.removeItem('userData')
      this.getUserInfo(null)
      this.$router.push('/')
    }

②vuex-along

  npm install vuex-along --save

③vuex-persistedstate

  npm install --save vuex-persistedstate

④vuex-persist

  npm install --save vuex-persist

 

posted @ 2020-08-19 15:19  番茄西红柿u  阅读(1065)  评论(0编辑  收藏  举报