扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
小编给大家分享一下vuex重置所有state的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
在网站设计制作、网站设计中从网站色彩、结构布局、栏目设置、关键词群组等细微处着手,突出企业的产品/服务/品牌,帮助企业锁定精准用户,提高在线咨询和转化,使成都网站营销成为有效果、有回报的无锡营销推广。创新互联专业成都网站建设10多年了,客户满意度97.8%,欢迎成都创新互联客户联系。在正式场景中我们经常遇到一个问题,就是登出页面或其他操作的时候,我们需要重置所有的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,使其不被更新。
当然我们也可以传入值来更新相应值,其他所有值不进行更新(这里我们就不详细说明)
看完了这篇文章,相信你对“vuex重置所有state的方法”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联成都网站设计公司行业资讯频道,感谢各位的阅读!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流