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对象的动态选择及遍历对象
Mar 10 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
Feb 23 Javascript
js实现左侧网页tab滑动门效果代码
Sep 06 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
Nov 18 Javascript
JS对象是否拥有某属性如何判断
Feb 03 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
react实现点击选中的li高亮的示例代码
May 24 Javascript
video.js 实现视频只能后退不能快进的思路详解
Aug 09 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
Jan 04 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水印技术
2007/02/14 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
CI框架表单验证实例详解
2016/11/21 PHP
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
2015/04/26 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
python使用Flask操作mysql实现登录功能
2018/05/14 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
致标枪运动员加油稿
2014/02/15 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
幼儿学前班评语
2014/12/29 职场文书
python基础之文件处理知识总结
2021/05/23 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
Elasticsearch 批量操作
2022/04/19 Python