美文网首页
Vue自定义重置Vuex的某个模块

Vue自定义重置Vuex的某个模块

作者: Luciena | 来源:发表于2021-03-02 12:44 被阅读0次

背景

在前端SPA项目开发中,我们往往会用Vuex来管理共享状态。在庞大的项目中,我们可能会遇到需要reset某一个store或者是全部(比如退出登录)

方案

1.对外抛出一个clearStore方法
2.基于传入的数据,去对应的reset这一个store

具体代码

/store/index.js

import Vue from 'vue'
import Vuex from 'vuex'
import problem from './modules/problem'
import week from './modules/week'
import library from './modules/library'
import global from './modules/global'
import main from './modules/main'
import final from './modules/final'

import getters from './getters'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    global,
    week,
    problem,
    library,
    main,
    final
  },
  getters
})
export default store

// 重置state数据
export function clearState(state, initData) {
  Object.keys(state).forEach(key => {
    if (!initData[key]) {
      delete state[key]
    }
  })
  Object.keys(initData).forEach(key => {
    state[key] = initData[key]
  })
}
// 清除store
export function clearStore(index) {
  if (!store) return
  const modules = ['Global', 'Problem', 'Library', 'Week', 'Main']
  if (index) {
    store.commit('clear' + modules[index])
  } else {
    modules.forEach(item => {
      store.commit('clear' + item)
    })
  }
}

/store/modules/global.js

import { clearState } from '../index.js'

// 初始化数据
const initState = () => ({
  forward: false,
  fromPageName: ''
})

const global = {
  state: initState(),
  mutations: {
    setForward(state, forward) {
      state.forward = forward
    },
    setFromPageName(state, fromPageName) {
      state.fromPageName = fromPageName
    },
    clearGlobal(state) {
      clearState(state, initState())
    }
  }
}

export default global

/views/demo.vue

import { clearStore } from '@/store/index.js'

// 重置global的store
clearStore(0)
// 重置所欲模块的store
clearStore()

相关文章

  • Vue自定义重置Vuex的某个模块

    背景 在前端SPA项目开发中,我们往往会用Vuex来管理共享状态。在庞大的项目中,我们可能会遇到需要reset某一...

  • VueX--VUE核心插件

    使用VueX方法 1.安装vuex模块 npm install vuex --save 2.作为插件使用 Vue....

  • Vuex笔记

    Vuex 安装插件 Vue use(Vuex) 创建对象 module是模块的意思,为什么在Vuex中我们要使用模...

  • vuex使用注意事项

    手动输入URL切换页面的时候,由于 vue 会重载,所以 vuex 里的数据会被清空(重置)

  • 2020-03月前端面试题

    vue相关 vue父子组件传值方式有哪些? 兄弟组件间如何传值? vuex是用来干什么的? vuex核心模块有哪些...

  • Vuex 原理

    1、Vue.use(Vuex):将Vuex 应用到Vue中 use是一个自定义插件,这个插件里有一个固定方法ins...

  • 2019-06-07

    import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)...

  • 2018-09-06

    import Vue from 'vue'import Vuex from 'vuex' Vue.use(Vuex...

  • 使用vuex-router-sync实现vue-router的状

    vuex-router-sync 插件通过动态注册模块将 vue-router 和 vuex 结合在一起,实现应...

  • 2019年底史上最全Vue框架整理从基础到实战(五)

    课程目标 运用vue+vue-router+vuex+element-ui搭建网站 对项目进行需求分析和模块划分以...

网友评论

      本文标题:Vue自定义重置Vuex的某个模块

      本文链接:https://www.haomeiwen.com/subject/onptqltx.html