利用Nuxt.js做Vuex数据持久化

 更新时间:2023年10月11日 11:40:43   作者:Vue安夏  
这篇文章主要介绍了利用Nuxt.js做Vuex数据持久化问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Nuxt.js做Vuex数据持久化

数据丢失的原因

vuex存储的数据只是在页面中,相当于全局变量,页面刷新的时候vuex里的数据会重新初始化,导致数据丢失。

因为vuex里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例,vuex里面的数据就会被重新赋值。

解决方法 

这里将Vuex的数据存储到localStorage中,具体看下面代码

1. 在plugins.js文件中创建 store-cache.js

2. 在nuxt.config.js 中代码如下

  plugins: [
     { src: '~/plugins/store-cache', ssr: false },
  ],

store-cache.js 文件代码如下

export default function(ctx) {
  // 离开页面 刷新前 将store中的数据存到localStorage
  window.addEventListener('beforeunload', () => {
    localStorage.setItem("storeCache", JSON.stringify(ctx.store.state))
  });
  // 获取localStorage中的store数据
  let storeCache = localStorage.getItem("storeCache")
  if (storeCache) {
    // 将localStorage中的store数据替换到store中
    ctx.store.replaceState(Object.assign({},ctx.store.state,JSON.parse(storeCache))
      )
  }
}

这样就解决了Vuex刷新数据丢失的问题了,实现了数据持久化

VueX数据持久化和辅助函数的使用

1.数据持久化

1.1本地缓存

在项目中使用vuex进行项目一些公共状态的共享,可以在任意页面中使用,避免了数据在组件中层层传递的繁琐。而且vuex中的数据是响应式的,很好的帮助我们解决了这个问题。但是vuex中的数据是保存在内存中的,页面刷新会重新初始化导致数据丢失。

我们可以使用localStorage或者sessionStorage,在mutation更改数据的时候,同时往浏览器本地缓存也存一份,在state取的时候也从本地缓存取一份或者用原来的。

1.2 使用第三方库 vuex-persistedstate

npm install --save?vuex-persistedstate

使用vuex-persistedstate默认存储到localStorage

 引入之后,配置plugins和存储持久化的键名即可,就会自动在localStorage配置的键名下存储state全局数据和模块化之后的数据

2.Vuex辅助函数的使用 

vuex可以使用$store.state或者getters,$store.dispatch和commit触发actions和mutations更新。也可以使用辅助函数。

$store的写法最简单且通俗易懂,但辅助函数的写法也建议大家掌握,免得遇到有些项目中遇到了看不懂。

首先需要从vuex中引入辅助函数

2.1 mapState和getters

mapState可以使用数组语法也可以使用,对象语法。

当vuex没有模块化的时候,可以直接使用数组语法,简单便捷,...mapState['state中键名'];也可以使用对象语法,如下。模块化之后也有两是写法,数组:...mapState['模块名','键名'];对象:如下。getters也是两种写法,和state一样,都是写在计算属性中。

computed: {
			...mapState({
				sellInfoCp: "sellerInfo"
			}),
			...mapState({
				billCp: state => state.bill.billInfo
			}),
			// ...mapGetters('bill',['bigSum'])
			// sellInfoCp() {
			// 	return this.$store.state.sellerInfo
			// }
		},

2.2 mapActions和mapMutations

mapActions和mapMutations都是写在methods方法中。

也都是有两种写法,数组和对象写法。

以mapMutations为例,数组:...mapMutations('模块名',['键名'])

对象:...mapMutations({自定义键名:"模块名/键名"})

methods: {
			// ...mapMutations('bill',['SET_AMOUNT']),
			...mapMutations({
				SET_AMOUNT: "bill/SET_AMOUNT"
			}),
			...mapActions('bill', ['FETCH_AMOUNT']),
		},

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 适合前端Vue开发童鞋的跨平台Weex的使用详解

    适合前端Vue开发童鞋的跨平台Weex的使用详解

    这篇文章主要介绍了适合前端Vue开发童鞋的跨平台Weex的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • vue实现动态路由的方法及路由原理解析

    vue实现动态路由的方法及路由原理解析

    这篇文章主要介绍了路由原理及vue实现动态路由,Vue Router 提供了丰富的 API,可以轻松地实现路由功能,并支持路由参数、查询参数、命名路由、嵌套路由等功能,可以满足不同应用程序的需求,需要的朋友可以参考下
    2023-06-06
  • Vue使用Echarts实现数据可视化的方法详解

    Vue使用Echarts实现数据可视化的方法详解

    这篇文章主要为大家详细介绍了Vue使用Echarts实现数据可视化的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Vue2 响应式系统之异步队列

    Vue2 响应式系统之异步队列

    这篇文章主要介绍了Vue2 响应式系统之异步队列,文章基于Vue2 的相关资料展开对主题的详细介绍,具有一定的参考价值需要的小伙伴可以参考一下
    2022-04-04
  • 详解vue+vueRouter+webpack的简单实例

    详解vue+vueRouter+webpack的简单实例

    这篇文章主要介绍了详解vue+vueRouter+webpack的简单实例,非常具有实用价值,需要的朋友可以参考下
    2017-06-06
  • 解决VUE项目使用Element-ui 下拉组件的验证失效问题

    解决VUE项目使用Element-ui 下拉组件的验证失效问题

    这篇文章主要介绍了解决VUE项目使用Element-ui 下拉组件的验证失效问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • vuex入门教程,图文+实例解析

    vuex入门教程,图文+实例解析

    这篇文章主要介绍了vuex入门教程,图文+实例解析,具有很好的参考价值,希望对大家有所帮助。
    2022-03-03
  • vue如何封装Axios的get、post请求

    vue如何封装Axios的get、post请求

    这篇文章主要介绍了vue如何封装Axios的get、post请求,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 在Vue中使用this.$store或者是$route一直报错的解决

    在Vue中使用this.$store或者是$route一直报错的解决

    今天小编就为大家分享一篇在Vue中使用this.$store或者是$route一直报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Vue nextTick获取更新后的DOM的实现

    Vue nextTick获取更新后的DOM的实现

    本文主要介绍了Vue nextTick获取更新后的DOM的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论