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

npm install vuex --save

main.js

import store from './store/index.js'
 
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

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('/')
    }
原文地址:https://www.cnblogs.com/xhrr/p/13529558.html