How to clear state in vuex store?

后端 未结 12 1296
既然无缘
既然无缘 2020-12-23 12:21

My state in vuex store is huge.

Is there a way to reset all the data in state in one go, instead of manually setting everything to null?

12条回答
  •  不思量自难忘°
    2020-12-23 13:11

    If you do a state = {}, you will remove the reactivity of the properties and your getters mutations will suddenly stop working.

    you can have a sub-property like:

    state: {
      subProperty: {
        a: '',
        lot: '',
        of: '',
        properties: '',
        .
        .
        .
      }
    }
    

    Doing a state.subProperty = {} should help, without losing the reactivity.

    You should not have a state too big, break them down to different modules and import to your vuex store like so:

    import Vue from 'vue'
    import Vuex from 'vuex'
    import authorization from './modules/authorization'
    import profile from './modules/profile'
    
    Vue.use(Vuex)
    
    export const store = new Vuex.Store({
      modules: {
        authorization,
        profile
      }
    })
    

    now in your individual files:

    // modules/authorization.js
    import * as NameSpace from '../NameSpace'
    import { someService } from '../../Services/something'
    
    const state = {
      [NameSpace.AUTH_STATE]: {
        auth: {},
        error: null
      }
    }
    
    const getters = {
      [NameSpace.AUTH_GETTER]: state => {
        return state[NameSpace.AUTH_STATE]
      }
    }
    
    const mutations = {
      [NameSpace.AUTH_MUTATION]: (state, payload) => {
        state[NameSpace.AUTH_STATE] = payload
      },
    }
    
    const actions = {
      [NameSpace.ASYNC_AUTH_ACTION]: ({ commit }, payload) => {
        someService.login(payload.username, payload.password)
          .then((user) => {
            commit(NameSpace.AUTH_MUTATION, {auth: user, error: null})
          })
          .catch((error) => {
            commit(NameSpace.AUTH_MUTATION, {auth: [], error: error})
          })
      }
    }
    
    export default {
      state,
      getters,
      mutations,
      actions
    }
    

    If you should want to clear the state you can just have a mutation implement:

    state[NameSpace.AUTH_STATE] = {
      auth: {},
      error: null
    }
    

提交回复
热议问题