vuex数据持久化的两种实现方案

 更新时间:2021年07月13日 11:49:36   作者:下落香樟树  
在vuex的时候刷新以后里面存储的state就会被浏览器释放掉,因为我们的state都是存储在内存中的,所以一刷新页面就会把state中的数据重置,这就涉及到vue数据持久化的问题,这篇文章主要给大家介绍了关于vuex数据持久化的两种实现方案,需要的朋友可以参考下

业务需求:

在基于vue开发SPA项目时,为了解决页面刷新后数据丢失的问题,我们一般都是将数据存储在localstorage或sessionstorage中;当数据需要全局处理统一管理时,我们也会借助于vue官方提供的vuex来进行数据的统一管理。vuex相比localstorage或sessionstorage来说,存储数据更安全些。与此同时,vuex也存在一些弊端,当页面刷新后,vuex中state存储的数据同时也会被更新,vuex中存储的数据不能持久化,需要监听处理来维持vuex存储的数据状态持久化。

为解决页面刷新后vuex中存储的数据状态不能持久化的问题,我采取的方案是借助第三方插件工具来实现vuex数据的持久化存储,来解决页面刷新后数据更新的问题。

方案一:vuex-persistedstate

安装插件

yarn add vuex-persistedstate
// 或
npm install --save vuex-persistedstate

使用方法

import Vuex from "vuex";
// 引入插件
import createPersistedState from "vuex-persistedstate";

Vue.use(Vuex);

const state = {};
const mutations = {};
const actions = {};

const store = new Vuex.Store({
	state,
	mutations,
	actions,
  /* vuex数据持久化配置 */
	plugins: [
		createPersistedState({
      // 存储方式:localStorage、sessionStorage、cookies
			storage: window.sessionStorage,
      // 存储的 key 的key值
			key: "store",
			render(state) {
        // 要存储的数据:本项目采用es6扩展运算符的方式存储了state中所有的数据
				return { ...state };
			}
		})
	]
});

export default store;

vuex中module数据的持久化存储

/* module.js */
export const dataStore = {
  state: {
    data: []
  }
}
 
/* store.js */
import { dataStore } from './module'
 
const dataState = createPersistedState({
  paths: ['data']
});
 
export new Vuex.Store({
  modules: {
    dataStore
  },
  plugins: [dataState]
});

注意事项:

  1. storage为存储方式,可选值为localStorage、sessionStorage和cookies;
  2. localStorage和sessionStorage两种存储方式可以采用上述代码中的写法,若想采用cookies坐位数据存储方式,则需要另外一种写法;
  3. render接收一个函数,返回值为一个对象;返回的对象中的键值对既是要持久化存储的数据;
  4. 若想持久化存储部分数据,请在return的对象中采用key:value键值对的方式进行数据存储,render函数中的参数既为state对象。

方案二:vuex-persist

安装插件

yarn add vuex-persist
// 或
npm install --save vuex-persist

使用方法

import Vuex from "vuex";
// 引入插件
import VuexPersistence from "vuex-persist";

Vue.use(Vuex);
//  初始化
const state = {
	userName:'admin'
};
const mutations = {};
const actions = {};
// 创建实例
const vuexPersisted = new VuexPersistence({
	storage: window.sessionStorage,
  render:state=>({
  	userName:state.userName
    // 或
    ...state
  })
});

const store = new Vuex.Store({
	state,
  actions,
  mutations,
  // 数据持久化设置
  plugins:[vuexPersisted.plugins]
});

export default store;

属性方法

属性值 数据类型 描述
key string The key to store the state in the storage_Default: 'vuex'_
storage Storage (Web API) localStorage, sessionStorage, localforage or your custom Storage object.Must implement getItem, setItem, clear etc.Default: window.localStorage
saveState function(key, state[, storage]) If not using storage, this custom function handles saving state to persistence
reducer function(state) => object State reducer. reduces state to only those values you want to save. By default, saves entire state
filter function(mutation) => boolean Mutation filter. Look at mutation.type and return true for only those ones which you want a persistence write to be triggered for. Default returns true for all mutations
modules string[] List of modules you want to persist. (Do not write your own reducer if you want to use this)
asyncStorage boolean Denotes if the store uses Promises (like localforage) or not (you must set this to true when suing something like localforage)Default: false
supportCircular boolean Denotes if the state has any circular references to it self(state.x === state)Default: false

总结

上述两种方案都可以实现vuex数据持久化存储。方案一是我在实际开发过程中用到的,方案二是在Github上看到的,综合来说,两者都可以时间最终的需求,而且都有对应的案例Demo可以参考。相比来说方案一在GitHub上的start数要高于方案二。

请结合实际情况选择符合自己的方案!

到此这篇关于vuex数据持久化的两种实现方案的文章就介绍到这了,更多相关vuex数据持久化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue之浏览器存储方法封装实例

    vue之浏览器存储方法封装实例

    下面小编就为大家分享一篇vue之浏览器存储方法封装实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • vue3源码分析reactivity实现原理

    vue3源码分析reactivity实现原理

    这篇文章主要为大家介绍了vue3源码分析reactivity实现原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Vue.js图片滑动验证的实现示例

    Vue.js图片滑动验证的实现示例

    为了防止有人恶意使用脚本进行批量操作,会设置图片滑动验证,本文就介绍了Vue.js图片滑动验证的实现示例,感兴趣的可以了解一下
    2023-05-05
  • 深入浅出vue图片路径的实现

    深入浅出vue图片路径的实现

    这篇文章主要介绍了深入浅出vue图片路径的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 详解vue-cli脚手架build目录中的dev-server.js配置文件

    详解vue-cli脚手架build目录中的dev-server.js配置文件

    这篇文章主要介绍了详解vue-cli脚手架build目录中的dev-server.js配置文件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Vue Element前端应用开发之echarts图表

    Vue Element前端应用开发之echarts图表

    在我们做应用系统的时候,往往都会涉及图表的展示,综合的图表展示能够给客户带来视觉的享受和数据直观体验,同时也是增强客户认同感的举措之一
    2021-05-05
  • Vue项目中Element UI组件未注册的问题原因及解决方法

    Vue项目中Element UI组件未注册的问题原因及解决方法

    在 Vue 项目中使用 Element UI 组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题的原因、解决方法,以及如何在需要时撤销相关操作,需要的朋友可以参考下
    2025-01-01
  • 使用Vue逐步实现Watch属性详解

    使用Vue逐步实现Watch属性详解

    这篇文章主要介绍了使用Vue逐步实现Watch属性详解,watch对象中的value分别支持函数、数组、字符串、对象,较为常用的是函数的方式,当想要观察一个对象以及对象中的每一个属性的变化时,便会用到对象的方式
    2022-08-08
  • Vue引入Stylus知识点总结

    Vue引入Stylus知识点总结

    在本篇文章里小编给各位整理的是一篇关于Vue引入Stylus知识点总结内容,有需要的朋友们可以学习参考下。
    2020-01-01
  • 详解vue-cli3使用

    详解vue-cli3使用

    这篇文章主要介绍了详解vue/cli 3使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论