vuex-persistedstate详细使用方法

Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题

问题: 页面刷新后,想保存页面未保存的数据。我们总是习惯于放在浏览器的sessionStorage和localStorage中。但是用了vue后,vuex便可以被应用了。

vuex优势:相比sessionStorage,存储数据更安全,sessionStorage可以在控制台被看到。

vuex劣势:在F5刷新页面后,vuex会重新更新state,所以,存储的数据会丢失。

vuex可以进行全局的状态管理,但刷新后刷新后数据会消失,这是我们不愿意看到的。怎么解决呢,我们可以结合本地存储做到数据持久化,也可以通过插件-vuex-persistedstate。

1.手动利用HTML5的本地存储

方法

vuex的state在localStorage或sessionStorage或其它存储方式中取值 在mutations,定义的方法里对vuex的状态操作的同时对存储也做对应的操作。这样state就会和存储一起存在并且与vuex同步
问题

最直观的就是,手动写比较麻烦。

2.利用vuex-persistedstate插件

插件的原理其实也是结合了存储方式,只是统一的配置就不需要手动每次都写存储方法

使用方法

安装

npm install vuex-persistedstate --save
引入及配置

在store下的index.js中

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
 // ...
 plugins: [createPersistedState()]
})
默认存储到localStorage

想要存储到sessionStorage,配置如下

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
 // ...
 plugins: [createPersistedState({
  storage: window.sessionStorage
 })]
})
// 想使用cookie同理

默认持久化所有state

指定需要持久化的state,配置如下

import createPersistedState from "vuex-persistedstate"
const store = new Vuex.Store({
 // ...
 plugins: [createPersistedState({
  storage: window.sessionStorage,
  reducer(val) {
   return {
   // 只储存state中的assessmentData
   assessmentData: val.assessmentData
  }
  }
 })]
// vuex引用多个插件的写法

譬如:vuex提示的插件和持久化的插件一起使用,配置如下

import createPersistedState from "vuex-persistedstate"
import createLogger from 'vuex/dist/logger'
// 判断环境 vuex提示生产环境中不使用
const debug = process.env.NODE_ENV !== 'production'
const createPersisted = createPersistedState({
 storage: window.sessionStorage
})
export default new Vuex.Store({
 // ...
 plugins: debug ? [createLogger(), createPersisted] : [createPersisted]
})
// plugins要是一个一维数组不然会解析错误

createPersistedState([options])使用给定的选项创建插件的新实例。可以提供以下选项来配置您的特定需求的插件:

key :存储持久状态的键。(默认:vuex)

paths :部分持续状态的任何路径的数组。如果没有路径给出,完整的状态是持久的。(默认:[])

reducer :一个函数,将被调用来基于给定的路径持久化的状态。默认包含这些值。

subscriber :一个被调用来设置突变订阅的函数。默认为store => handler => store.subscribe(handler)

storage :而不是(或与)getState和setState。默认为localStorage。

getState :将被调用以重新水化先前持久状态的函数。默认使用storage。

setState :将被调用来保持给定状态的函数。默认使用storage。

filter :将被调用来过滤将setState最终触发存储的任何突变的函数。默认为() => true
 

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您需要将vuex-persistedstate与mp-store结合使用,可以按照以下步骤进行操作: 1. 安装依赖 需要安装vuex-persistedstate和mp-store这两个依赖: ``` npm install vuex-persistedstate mp-store --save ``` 2. 在store中使用vuex-persistedstate插件 在store中使用vuex-persistedstate插件来实现持久化存储。下面是一个示例: ``` import { PersistedState } from 'vuex-persistedstate' import mpStore from 'mp-store' const state = { count: 0 } const mutations = { increment (state) { state.count++ } } const actions = { increment ({commit}) { commit('increment') } } const plugins = [ PersistedState({ key: 'my-store', storage: { getItem: (key) => { return mpStore.getStorageSync(key) }, setItem: (key, value) => { return mpStore.setStorageSync(key, value) }, removeItem: (key) => { return mpStore.removeStorageSync(key) } } }) ] export default { state, mutations, actions, plugins } ``` 在上述代码中,使用PersistedState插件来实现持久化存储。同时,为了适配mp-store,需要在storage配置中指定getItem、setItem和removeItem方法,这些方法分别对应mpStore.getStorageSync、mpStore.setStorageSync和mpStore.removeStorageSync。这样,就可以在小程序中使用vuex-persistedstate进行持久化存储了。 3. 在小程序中引入store 在小程序中引入store,并使用其中的状态和方法。下面是一个示例: ``` <template> <div> <p>Count: {{count}}</p> <button @click="increment">Increment</button> </div> </template> <script> import { mapState, mapActions } from 'vuex' import store from '@/store' export default { computed: { ...mapState(['count']) }, methods: { ...mapActions(['increment']) }, onLoad () { console.log(store.state.count) // 输出初始值0 store.dispatch('increment') console.log(store.state.count) // 输出1 } } </script> ``` 在上述代码中,通过import引入store,并使用mapState和mapActions辅助函数来将count属性和increment方法映射到组件中。在onLoad生命周期中,可以通过store.state.count访问到初始值0,并通过store.dispatch('increment')调用increment方法,最后输出count属性的值1。这样,就可以在小程序中使用vuex-persistedstate进行持久化存储了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值