Vuex数据刷新后,如何做持久化处理

2 篇文章 0 订阅
前言

今天做vue项目时需要实现多个组件的数据同步,首当其冲选择了vuex。
vuex介绍:参考
项目需求:在用户管理界面更改用户名及其头像成功时,主界面home的用户和头像要同步更新。
在这里插入图片描述

分析

  首先明确一点js代码是运行在内存中的,代码运行时的所有变量、函数也都是保存在内存中的。刷新页面,以前申请的内存被释放,重新加载脚本代码,变量重新赋值,所以这些数据要想存储就必须存储在外部,例如:Local Storage、Session Storage等。
  回到项目中,当我修改用户信息后一定会调用init方法刷新页面,此时如果不作数据持久化处理,主页面的用户内容(通过vuex获取的)都会被初始化为空,这肯定不是我们想要的,那么持久化存储用哪一种,个人认为用Session Storage好一点,因为当session失效后存储的数据自然也会被清空。

操作

(1)安装vuex

cnpm install vuex --save

(2)src文件夹下创建store目录,创建store.js文件

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
const store = new Vuex.Store(
  {
    //定义用户对象
    state:{
      manage:{}
    },
    //定义更新用户对象的方法 注意:更新的同时要做持久化处理
    mutations:{
      initManage(state,data){
        //存储在sessionStorage的内容要序列化成json
        window.sessionStorage.setItem("manage",JSON.stringify(data));
        state.manage = data;
      }
    },
    actions:{

    }
  }
)
export default store;

(3)main.js引入store.js

import Vuex from 'vuex'
import store from './store/store'
Vue.use(Vuex)
new Vue({
  router,
  store,
  render: function (h)
  { return h(App) }
}).$mount('#app')

(4)以上配置完成,下面我们需要在业务部分使用,先看用户信息的更新部分

editManage(){
      var fd = new FormData();
      fd.append("manage",JSON.stringify(this.editForm));
      fd.append("image",this.editImageFile.raw);
      this.putRequest("/manage/",fd).then(resp=>{
        if(resp){
          //修改成功后,同步更新
          this.$store.commit('initManage',resp.obj);
          this.currentUsername = resp.obj.name;
          this.initManage();
        }
        this.editDialogVisible = false
      })
    },

(5)主界面home部分,初始化当前用户信息

//vue的生命周期函数
  created(){
    //每次初始化一定要从sessionStorage获取,并存储在store中
    var obj = JSON.parse(window.sessionStorage.getItem('manage'));
    this.$store.commit('initManage',obj);
  }

主界面对用户信息进行监控

 computed:{
    manage(){
      return this.$store.state.manage;
    },
  },

用户信息的展示与数据绑定

 <el-dropdown class="userInfo" @command="handleCommand">
          <span class="el-dropdown-link">
          <!--用户名与头像展示部分-->
            {{this.$store.state.manage.name}}<img :src=" this.$store.state.manage.userface" alt="">
          </span>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item command="userinfo">个人中心</el-dropdown-item>
              <el-dropdown-item command="setting">修改密码</el-dropdown-item>
              <el-dropdown-item command="logout" divided>注销登录</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
总结

如有任何问题欢迎评论,我会及时回复谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值