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 继承的实现
Jul 09 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 Javascript
javascript学习笔记(二) js一些基本概念
Jun 18 Javascript
javascript 正则表达式相关应介绍
Nov 27 Javascript
node.js中的http.request方法使用说明
Dec 14 Javascript
three.js快速入门【推荐】
Jan 21 Javascript
为你的微信小程序体积瘦身详解
May 20 Javascript
微信小程序实现多选删除列表数据功能示例
Jan 15 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
Apr 17 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
Aug 03 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
Aug 25 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
vue组件学习教程
2017/09/09 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
原生js实现日历效果
2020/03/02 Javascript
node.js基础知识汇总
2020/08/25 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
详解python中requirements.txt的一切
2017/03/03 Python
python print 按逗号或空格分隔的方法
2018/05/02 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Python 从attribute到property详解
2020/03/05 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
python能做哪方面的工作
2020/06/15 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
应届大学生求职的自我评价
2013/11/17 职场文书
父亲追悼会答谢词
2014/01/17 职场文书
大学新生军训方案
2014/05/03 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python