vuex如何重置所有state(可定制)


Posted in Javascript onJanuary 17, 2019

在正式场景中我们经常遇到一个问题,就是登出页面或其他操作的时候,我们需要重置所有的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,使其不被更新。

当然我们也可以传入值来更新相应值,其他所有值不进行更新(这里我们就不详细说明)

以上就是我实践思考出来的方法,可能有不足的地方,欢迎大家提问、交流或提出更好的建议。也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript delete 使用示例代码
Mar 29 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
Sep 26 Javascript
拉动滚动条加载数据的jquery代码
May 03 Javascript
实现web打印的各种方法介绍及实现代码
Jan 09 Javascript
js、jquery图片动画、动态切换示例代码
Jun 03 Javascript
jQuery的基本概念与高级编程
May 14 Javascript
AngularJS基础 ng-readonly 指令简单示例
Aug 02 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
简单了解小程序+node梳理登陆流程
Jun 24 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
Feb 08 Javascript
使用react-virtualized实现图片动态高度长列表的问题
May 28 Javascript
node app 打包工具pkg的具体使用
Jan 17 #Javascript
JS实现深度优先搜索求解两点间最短路径
Jan 17 #Javascript
JS使用Dijkstra算法求解最短路径
Jan 17 #Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 #Javascript
vue权限管理系统的实现代码
Jan 17 #Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 #Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 #Javascript
You might like
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
python ---lambda匿名函数介绍
2019/03/13 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
十岁生日家长答谢词
2014/01/17 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
入党介绍人考察意见
2015/06/01 职场文书
党支部季度考核意见
2015/06/02 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
python实现的web监控系统
2021/04/27 Python