配置Vuex框架,使用Vuex状态管理,localStorage,beforeEnter导航守卫,首页保存用户信息,用户刷新,防止昵称头像丢失问题

概要

配置Vuex框架,使用Vuex状态管理,localStorage,beforeEnter导航守卫,首页保存用户信息,用户刷新,防止昵称头像丢失问题

例如:存储用户的基本信息头像和昵称

配置Vuex:

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import '../src/assets/global.css'
//小版类型组件
Vue.use(ElementUI,{size:"mini"})
// Vue.use(ElementUI)
import Element from "element-ui";
import Cookies from "js-cookie";

// Vue.use(Element, {
//   size: Cookies.get("size") || "medium", // set element-ui default size
// });


Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

store目录下:

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import getters from "@/store/getters";
import user from "@/store/modules/user";

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    //这个是modules目录下的文件
    user
  },
  getters
})

     getter.js

const getters = {
    userInfo_data:state=>state.user.data
}
export default getters

modules目录下的user.js

const state = {
    data:null
}

const mutations = {
    SET_USER_DATA:(state,payload) =>{
        state.data = payload;
    }
}

const actions = {
    setUserData({ commit }, payload) {
        commit('SET_USER_DATA', payload)
    }
}

export default {
    namespaced: true,
    state,
    mutations,
    actions
}

登录接口准备调用配置好的Vuex进行存储:

以下接口搭配了localStorage和beforeEnter导航守卫进行存储用户信息,防止用户在首页刷新用户基本信息丢失:

          //校验完毕调用登录接口
          userLogin(this.loginForm).then(res=>{
            if(res.data.code != 200){
              const errorMessage = res.data.msg
              message(false,errorMessage,"error",true)
            }else {
              // 设置token 存入本地浏览器token
              setToken("token",res.data.data.token)

              //存到本地浏览器,路由跳转的时候,在获取更新到Vuex
              localStorage.setItem('userInfoData', JSON.stringify(res.data.data))

              message(false,"恭喜您,登录成功了哦","success",true)
              // 把用户的信息并存储到Vuex 并且跳到首页
                this.$store.dispatch("user/setUserData",res.data.data).then(()=>{
                  this.$router.push({path:'/'})
              })

            }
          })

route目录下index.js

{
    path: '/',
    name: 'home',
    component: () => import('@/views/HomeView.vue'),
    
    // 导航守卫
    beforeEnter: (to, from, next) => {
      // 检查本地存储是否有数据
      const savedData = localStorage.getItem('userInfoData');
      if (savedData) {
        // 如果有保存的数据,则触发 action 更新 Vuex 中的数据
        store.dispatch('user/setUserData', JSON.parse(savedData))
            .then(() => {
              // 继续导航
              next();
            });
      } else {
        // 没有保存的数据,直接继续导航
        next();
      }
    },
  },

获取用户信息数据:

this.userInfoForm  = this.$store.getters.userInfo_data;
userInfoForm: {
  id:'',
  head:'',
  nickName:''
},

this.userInfoForm这里对象里面就是你需要存的数据,例如头像,昵称等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值