博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vuex重置所有state
阅读量:3903 次
发布时间:2019-05-23

本文共 1649 字,大约阅读时间需要 5 分钟。

在正式场景中我们经常遇到一个问题,就是登出页面或其他操作的时候,我们需要重置所有的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插件(引用方式参考 )

在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插件(引用方式参考 )
这里我采用了lodash插件(引用方式参考 )

 

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,使其不被更新。
当然我们也可以传入值来更新相应值,其他所有值不进行更新(这里我们就不详细说明)

以上,就是我实践思考出来的方法,可能有不足的地方,欢迎大家提问、交流或提出更好的建议。谢谢

来源:

转载于:https://www.cnblogs.com/lalalagq/p/10282282.html

你可能感兴趣的文章
linux内核:CPU私有变量(per-CPU变量)
查看>>
编程之外:使用Latex/Tex创建自己的简历。
查看>>
Linux内核哈希表分析与应用
查看>>
Linux内核分析 - 网络[十二]:UDP模块 - socket
查看>>
linux kernel中epoll的设计和实现
查看>>
linux kernel中epoll的设计和实现
查看>>
linux:网络栈内存不足引发进程挂起问题
查看>>
linux:用systemtap来修改下linux内核变量的值
查看>>
linux:systemtap观察page_cache的使用情况
查看>>
linux:dropwatch 网络协议栈丢包检查利器
查看>>
Linux IO协议栈框图
查看>>
linux 内核编程之proc虚拟文件系统
查看>>
Linux学习】epoll详解
查看>>
Linux open系统调用流程
查看>>
Linux 2.6.35 新增特性 RPS RFS [复制链接]
查看>>
使用gdb调试linux内核
查看>>
使用systemtap调试linux内核
查看>>
SystemTap Beginner
查看>>
深入分析 Linux 内核链表
查看>>
qperf测量网络带宽和延迟
查看>>