vuex状态持久化在vue和nuxt.js的区别

Vue

相信很多人对 vue 中的 vuex 状态持久化已经很熟悉了,使用 vuex-persistedstate 或者 vuex-persist 即可。

这里推荐使用前者,因为 vuex-persist 基于 ts ,webpack 未经配置打包 ts 有问题,而且在 ie 中存在问题。

使用

import persistedState from 'vuex-persistedstate'
export default new Vuex.Store({
    // ...
    plugins: [persistedState()]
})

更换 sessionStorage 存储方式:

import persistedState from 'vuex-persistedstate'
export default new Vuex.Store({
    // ...
    plugins: [
        persistedState({ storage: window.sessionStorage })
    ]
})

使用 cookie 存储:

import persistedState from 'vuex-persistedstate'
import * as Cookies from 'js-cookie'
export default new Vuex.Store({
  // ...
  plugins: [
    persistedState({
      storage: {
        getItem: key => Cookies.get(key),
        setItem: (key, value) => Cookies.set(key, value, { expires: 7 }),
        removeItem: key => Cookies.remove(key)
      }
    })
  ]
})

Nuxt

因为每次请求都自带 cookies ,所以可以在第一次进入页面的 nuxt 服务端初始化方法 nuxtServerInit 中将 cookies 存到 vuex 状态树中。

由于是服务端获取 cookies ,js-cookie 不再适用,需要使用 cookie-universal-nuxt :

npm install cookie-universal-nuxt

之后在 store/index.js 中:

// 定义行为
const actions = {
    // nuxt提供的,每次发送请求都会先调用此方法 ,并且第1个参数store, 该方法的第2个参数是context
    nuxtServerInit({commit}, {app}) {
        const data = {}
        data.accessToken = app.$cookies.get('accessToken')
        // 更新 vuex 状态树
        commit('UPDATE_ALL_STATE', data)
    }
 }

这里的 app.$cookies.get 是 cookie-universal-nuxt 给我们提供的在服务端获取 cookies 的方法。

他等价于使用 context 中的 req 对象获取 cookie :req.headers.cookie 之后解析出我们需要的对象值。

那问题来了,既然都有原生 vuex 状态持久化方法了为什么还要用 nuxt 的方法,因为在 created 的时候 window 对象不能使用(包括 cookie 和 loaclStorage),只能在 mounted 使用,于是在页面加载的一瞬间不能加载状态树,导致页面数据反馈变慢,而 nuxt 的策略就可以优化这个问题,十分人性化。 

vue的vuex的数据持久化

首先,什么是vuex?vuex就是一个集中式的状态管理工具,在许多页面需要共享同一个或者多个值/状态的时候就会用到vuex, 但是,vuex不同于cookie和localStroage, 页面刷新, state中的数据就会丢失。因此我们需要对vuex中的状态做持久化的处理。

使用插件vuex-persistedstate对数据进行数据的持久化处理

1.安装

npm install vuex-persistedstate --save

在store下的index.js下引入

import createPersistedState from "vuex-persistedstate";

使用:

// 数据的持久化处理
  plugins: [
    createPersistedState({
      // 存储方式:localStorage、sessionStorage、cookies
      storage: window.cookies,//存储到cookie
      // storage:window.sessionStorage 存储到sessionStorage
      // 如果不写默认存储到localStorage
      // 存储的 key 的key值
      key: "store",
      render(state) {
        // 要存储的数据:本项目采用es6扩展运算符的方式存储了state中所有的数据
        return { ...state };
        //需要存储其中的某些数据的话需要单独取出来
       // return {
            //只储存state中的assessmentData
            //assessmentData: val.assessmentData
      //}
    })
  ]

也可以使用多个插件

plugins要是一个一维数组不然会解析错误

 plugins: debug ? [createLogger(), createPersisted] : [createPersisted]

补充,实际开发中,我们不会把所有的状态都只放在一个state中,所以就有了modules

当我们有多个vuex状态的时候

import Vue from 'vue'
import Vuex from 'vuex'
import user from './user.js' //这是专门管理user的
import admin from './admin.js' // 这是专门管理admin的
Vue.use(Vuex)
let storeRoot={
  state: {
      
  },
  mutations: {
     
  },
  actions: {
      
  },
  modules: {
      //在这里进行引用
      user,
      admin
  }
}
export default new Vuex.Store(storeRoot) //导出

admin文件

let admin={
    namespaced: true,
    state: {
    },
    mutations: {
    },
    actions: {
        }
    }
}
export default admin

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

vuex状态持久化在vue和nuxt.js中的区别说明的更多相关文章

  1. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. vue自定义加载指令v-loading占位图指令v-showimg

    这篇文章主要为大家介绍了vue自定义加载指令和v-loading占位图指令v-showimg的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  3. vue使用动画实现滚动表格效果

    这篇文章主要为大家详细介绍了vue使用动画实现滚动表格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. 关于Vue 监控数组的问题

    这篇文章主要介绍了Vue 监控数组的示例,主要包括Vue 是如何追踪数据发生变化,Vue 如何更新数组以及为什么有些数组的数据变更不能被 Vue 监测到,对vue监控数组知识是面试比较常见的问题,感兴趣的朋友一起看看吧

  5. Vue子组件props从父组件接收数据并存入data

    这篇文章主要介绍了Vue子组件props从父组件接收数据并存入data的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. Vue h函数的使用详解

    本文主要介绍了Vue h函数的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. VUE响应式原理的实现详解

    这篇文章主要为大家详细介绍了VUE响应式原理的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  8. vue+Element ui实现照片墙效果

    这篇文章主要为大家详细介绍了vue+Element ui实现照片墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. vue+elemet实现表格手动合并行列

    这篇文章主要为大家详细介绍了vue+elemet实现表格手动合并行列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. iview+vue实现导入EXCEL预览功能

    这篇文章主要为大家详细介绍了iview+vue实现导入EXCEL预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部