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与DOM组合动态创建表格实例
Dec 23 Javascript
JS判断客服QQ号在线还是离线状态的方法
Jan 13 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
Apr 03 Javascript
js轮播图代码分享
Jul 14 Javascript
jquery实现拖动效果
Aug 10 Javascript
使用jQuery.Pin垂直滚动时固定导航
May 24 jQuery
Vue实现购物车场景下的应用
Nov 27 Javascript
JavaScript设计模式之享元模式实例详解
Jan 17 Javascript
js实现延迟加载的几种方法详解
Jan 19 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
May 28 Javascript
javascript实现自由编辑图片代码详解
Jun 21 Javascript
JS Ajax请求会话过期处理问题解决方法分析
Nov 16 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
关于手调机和数调机的选择
2021/03/02 无线电
解析PHP中ob_start()函数的用法
2013/06/24 PHP
深入浅析php json 格式控制
2015/12/24 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
浅析javascript中的DOM
2015/03/01 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
Python open读写文件实现脚本
2008/09/06 Python
简单介绍Python中的len()函数的使用
2015/04/07 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
python脚本替换指定行实现步骤
2017/07/11 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
tensorflow 获取变量&打印权值的实例讲解
2018/06/14 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Python如何定义接口和抽象类
2020/07/28 Python
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
校本教研工作制度
2014/01/22 职场文书
市场安全管理制度
2014/01/26 职场文书
学校十一活动方案
2014/02/01 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
关于保护环境的建议书
2014/05/13 职场文书
校运会通讯稿
2015/07/18 职场文书
节约用水广告语60条
2019/11/14 职场文书