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

在正式场景中我们常常碰到一个题目,就是登出页面或其他操纵的时刻,我们须要重置一切的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,使其不被更新。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值