🗃️ Vuex数据持久化存储

阿轩的BUG
文章191
评论56
标签101
站点日志
作者总数:1位
置顶文章:0篇
标签总数:101条
文章总数:196篇
评论总数:56条
微语总数:201条
运行天数:2315天
最近更新:2026-07-28
文章标签
最新评论
Sherlock
2025-08-21
不是应该打包成apk文件吗,怎么突然就运行编译了,下一步呢
老金er
2025-05-25
人生设计非常必要,在信息化发达的今天,周围大部分人依然只能过着人生工程模式生活,长时间生活洗礼后,尽管“人生工程”已经不再适合很多人,他们也无法做出任何改变,人生设计给我们提供了新的思路,值得尝试
赏帮赚
2025-05-25
职场太多的尔虞我诈
三笑
2024-08-16
emlog6.0.1可以升级支持吗?
pony
2024-07-08
这篇文章提供了一种新的人生规划方法——"人生设计",它借鉴了产品设计的理念,鼓励人们以创造性和探索性的方式思考和规划自己的生活。以下是对这篇文章的几个评价维度: 创新性:将产品设计的理念应用于人生规划是一个新颖的视角,为人们提供了一种跳出传统生活轨迹,探索个性化生活路径的方法。 实用性:文章不仅提出了理念,还详细介绍了具体的实施步骤,包括自我评估、制定计划、原型设计和实践选择等,具有很强的操作性。 启发性:通过强调好奇心、不断尝试、重新定义问题等心态,文章鼓励人们打破常规,勇于探索未知,这对于激发个人潜能和创造力具有积极作用。 适应性:"人生设计"理念适用于不同人生阶段和不同背景的人,无论是希望从头开始的人,还是已经取得一定成就但希望探索新方向的人,都可以从中获得启发。 情感共鸣:文章对许多人对传统生活轨迹的不满和对改变的渴望进行了深刻的洞察,能够引起读者的共鸣。 可持续性:人生设计强调的是一个持续迭代和试错的过程,这与现实生活的发展规律相吻合,有助于人们在不断变化的环境中做出适应性调整。 教育意义:作为一种人生规划方法,"人生设计"可以作为教育的一部分,帮助年轻人更早地学会自我探索和规划,为未来的生活和职业发展打下基础。 局限性:尽管"人生设计"提供了一种新的思考框架,但它可能需要个人具备一定的自我认知和反思能力,对于一些缺乏自我探索经验的人来说,可能需要额外的指导和支持。 总体来说,这篇文章提供了一种有价值的人生规划方法,对于那些渴望改变、寻求个性化生活的人来说,是一种有益的参考和指导。
首页实用干货 🌋

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为存储方式,可选值为localStoragesessionStoragecookies
  2. localStoragesessionStorage两种存储方式可以采用上述代码中的写法,若想采用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]
});

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
restoreState function (key[, storage]) => state If not using storage, this custom function handles retrieving state from storage
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 itself (state.x === state)Default: false

总结

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

上一篇
🗃️ 说说 vue2 和 vue3 核心diff算法
下一篇
🎨 如何用一行 CSS 实现 10 种现代布局