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 12 Javascript
jQuery 打造动态下滑菜单实现说明
Apr 15 Javascript
关于javascript event flow 的一个bug详解
Sep 17 Javascript
Vue数据驱动模拟实现3
Jan 11 Javascript
jquery网页加载进度条的实现
Jun 01 jQuery
Electron + vue 打包桌面操作流程详解
Jun 24 Javascript
ES6 Generator函数的应用实例分析
Jun 26 Javascript
vue回到顶部监听滚动事件详解
Aug 02 Javascript
将RGB值转换为灰度值的简单算法
Oct 09 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
Feb 03 Javascript
浅谈TypeScript的类型保护机制
Feb 23 Javascript
详解实现vue的数据响应式原理
Jan 20 Vue.js
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采集时被封ip的解决方法
2010/08/29 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
php判断目录存在的简单方法
2019/09/26 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
用js实现trim()的解决办法
2013/04/16 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
python发送HTTP请求的方法小结
2015/07/08 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
为什么Python中没有"a++"这种写法
2018/11/27 Python
Python列表的切片实例讲解
2019/08/20 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
门卫工作岗位职责
2013/12/17 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
会议通知格式范文
2015/04/15 职场文书
消防安全培训工作总结
2015/10/23 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS