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 相关文章推荐
jqPlot Option配置对象详解
Jul 25 Javascript
通过实例理解javascript中没有函数重载的概念
Jun 03 Javascript
如何让一个json文件显示在表格里【实现代码】
May 09 Javascript
JavaScript的Vue.js库入门学习教程
May 23 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
Jul 04 Javascript
jquery仿苹果的时间/日期选择效果
Mar 08 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
Jul 25 Javascript
微信小程序制作表格的方法
Feb 14 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
Mar 14 Javascript
vue slot与传参实例代码讲解
Apr 28 Javascript
JS表格的动态操作完整示例
Jan 13 Javascript
JS中多层次排序算法的实现代码
Jan 06 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
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
thinkphp分页集成实例
2017/07/24 PHP
php取出数组单个值的方法
2018/03/12 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
React优化子组件render的使用
2019/05/12 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
利用python如何处理nc数据详解
2018/05/23 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
房屋产权证明书
2014/10/15 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
党员学习型组织心得体会
2019/06/21 职场文书