利用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使用tracking实现人脸识别/人脸侦测完整代码

    vue使用tracking实现人脸识别/人脸侦测完整代码

    作为一个AI模型,人脸识别涉及到多个技术领域,下面这篇文章主要给大家介绍了关于vue使用tracking实现人脸识别/人脸侦测的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • 十分钟封装一个好用的axios步骤示例

    十分钟封装一个好用的axios步骤示例

    这篇文章主要为大家介绍了十分钟封装一个好用的axios步骤示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • vue项目中如何引入cesium

    vue项目中如何引入cesium

    这篇文章主要介绍了vue项目中如何引入cesium问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue-element-admin登录全流程分享

    vue-element-admin登录全流程分享

    这篇文章主要介绍了vue-element-admin登录全流程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue结合Echarts实现点击高亮效果的示例

    vue结合Echarts实现点击高亮效果的示例

    下面小编就为大家分享一篇vue结合Echarts实现点击高亮效果的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 如何在vue中使用pdfjs预览pdf文件

    如何在vue中使用pdfjs预览pdf文件

    本文主要讲解了如何在vue中使用pdfjs预览pdf文件,这样的优势是无须让用户安装专门的软件即可实现预览,下面就看看如何实现这个需求
    2021-06-06
  • ant design vue 清空upload组件图片缓存的问题

    ant design vue 清空upload组件图片缓存的问题

    这篇文章主要介绍了ant design vue 清空upload组件图片缓存的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • vue中v-for和v-if一起使用之使用compute的示例代码

    vue中v-for和v-if一起使用之使用compute的示例代码

    这篇文章主要介绍了vue中v-for和v-if一起使用之使用compute的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Vue axios和vue-axios的关系及使用区别

    Vue axios和vue-axios的关系及使用区别

    axios是基于promise的HTTP库,可以使用在浏览器和node.js中,它不是vue的第三方插件,vue-axios是axios集成到Vue.js的小包装器,可以像插件一样安装使用:Vue.use(VueAxios, axios),本文给大家介绍Vue axios和vue-axios关系,感兴趣的朋友一起看看吧
    2022-08-08
  • Vue3和Vue2的slot-scope插槽用法解读

    Vue3和Vue2的slot-scope插槽用法解读

    这篇文章主要介绍了Vue3和Vue2的slot-scope插槽用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论