state重置 vuex_vuex重置一切state(可定制)

  • Post author:
  • Post category:vue


在正式场景中我们常常碰到一个题目,就是登出页面或其他操纵的时刻,我们须要重置一切的vuex,让其变成初始状况,

那末,就触及到了多种要领:

1、页面革新:

window.location.reload()

这个要领经由过程路由推断优化或是逻辑优化,一直页面时从新加载,就会致使用户体验很差,对浏览器来讲也是一种不必要的累赘,

所以我尝试以后就摒弃了。

2、写一个重置的要领然后调取

actions.resetVuex = function() {

store.commit(state.a, null)

store.commit(state.b, null)

store.commit(state.c, null)

}

store.dispatch(‘resetVuex’)

如许又会涌现多个module,多个state,须要手动增加多个,工作量庞大且不容易保护,而且假如我们state初始是个个数组,一个对象这些更不好操纵,更优最多就是我们初始的时刻深拷贝一份,然则也须要每一个module里举行操纵和封装

这两种要领是能够解决题目标,然则我照样没有采纳这两种体式格局,由于觉得已捐躯了某些东西来杀青目标了,经由过程我重复的实践,和探索我采取了以下要领:

起首页面加载,第一次加载引入store的时刻,store的一切state肯定是初始值,那末我就做一个当地缓存记录下来:

这里我采纳了store插件(援用体式格局参考 https://github.com/nbubna/store)

在main.js建立vue实例之前:

import _store from ‘store’

import createStore from ‘./store’

const store = createStore() //我建立好的 vuex库

_store({ initState: store.state }) //缓存一个名为initState的初始状况

我们晓得main.js是页面载入的时刻实行一次的那末缓存的initState就是本身最最先建立store里的state状况

(包含了module里的一切state);

然后我们在store建立的全局写一个mutation要领

这里我采纳了store插件(援用体式格局参考 https://github.com/nbubna/store)

这里我采纳了lodash插件(援用体式格局参考 https://www.lodashjs.com/)

import _ from ‘lodash’

import _store from ‘store2’

const store = new Vuex.Store({

state: {

token: ”

},

mutations: {

resetAllState (state, payload = []) {

if (payload instanceof Array === false) { // 考证传入的是一个数组

return

}

const initState = _store(‘initState’) // 掏出初始值的缓存

const _initState = payload.length ? _.omit(initState, payload) : initState // 推断传入值有没有数据,有数据剔除相对应的值

_.extend(state, _initState)

}

},

modules: {

}

})

这个名叫resetAllState的mutation要领里就是讲全局的state替换成我们缓存的state。

这里为何 payload 是一个数组呢?

由于这就是题目所形貌的可定制,假如页面内重置绝大部分状况,但须要保存个中一些状况的时刻我们能够经由过程我们通报过来的state值来剔除响应的state,使其不被更新。

固然我们也能够传入值来更新响应值,其他一切值不举行更新(这里我们就不细致申明)

以上,就是我实践思索出来的要领,可能有不足的处所,迎接人人发问、交换或提出更好的发起。感谢



版权声明:本文为weixin_28913019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。