vuex-extensions

Add Reset and Mixins function to Vuex
170,780 40
Install
npm install vuex-extensions
Latest Version:4.1.0
Vue:3
Older releases:2
License:MIT
Last Updated:Jul 25, 2023
Links: GitHub  ·  npm
Maintainer: huybuidac

:fire: HEADS UP! You're currently looking at Vuex-extensions 4 branch. If you're looking for Vuex 3, please check out master branch.


vuex-extensions

Reset function and Mixins option for Vuex

npm npm npm

Vuex Extensions

Add Reset and Mixins function to Vuex

Resources

Install

You can install it via NPM

npm install vuex-extensions

or YARN

yarn add vuex-extensions

Usage

Check out the example on CodeSandbox.

Edit vuex-persistedstate

Creating Vuex.Store
import { Store } from 'vuex'
import { createStore } from 'vuex-extensions'

export default createStore(Store, {
  plugins: []
  modules: {}
})
Mixins: adding some default getters/mutations/actions to all modules
    const store = createStore(Vuex.Store, {
      modules: {
        sub: {
          namespaced: true,
          state: {
            count: 0
          }
        }
      },
      mixins: {
        mutations: {
          changeState: function (state, changed) {
            Object.entries(changed)
              .forEach(([name, value]) => {
                state[name] = value
              })
          }
        }
      }
    })
    
    store.commit('sub/changeState', { count: 1 })
Store resets to initial State
import { useStore } from 'vuex'

// Vue composition
const store = useStore()
store.reset()

// Vue Component
this.$store.reset()
// Vuex action
modules: {
  sub: {
    actions: {
      logout() {
        this.reset()
      }
    }
  }
}
Reset with option

Assume: store has structure as:

root
  - state: { count: 0 }
  - modules:
    - child1
      - state: { count: 0 }
      - modules:
        - grandchild1 { state: { count: 0 } }
        - grandchild2 { state: { count: 0 } }
    - child1
      - state: { count: 0 }
      - modules:
        - grandchild1 { state: { count: 0 } }
        - grandchild2 { state: { count: 0 } }

After some actions, store has state:

{
  state: { count: 1 },
  child1: { 
    state: { count: 1 }
    grandchild1: { state: { count: 1 } }
    grandchild2: { state: { count: 1 } }
  },
  child1: {
    state: { count: 1 }
    grandchild1: { state: { count: 1 } }
    grandchild2: { state: { count: 1 } }
  }
}
// Reset root state only, all submodules are ingored
this.$store.reset({ self: true, nested: false })
// {
//   state: { count: 0 },
//   child1: { 
//     state: { count: 1 }
//     grandchild1: { state: { count: 1 } }
//     grandchild2: { state: { count: 1 } }
//   },
//   child1: {
//     state: { count: 1 }
//     grandchild1: { state: { count: 1 } }
//     grandchild2: { state: { count: 1 } }
//   }
// }

// Reset child1 and all it's sub modules, all other modules are ingored
this.$store.reset({ 
  self: false,
  nested: false, // if nested is not set (undefined), it will be equal to self
  modules: { child1: { self: true} }
})
// {
//   state: { count: 1 },
//   child1: { 
//     state: { count: 0 }
//     grandchild1: { state: { count: 0 } }
//     grandchild2: { state: { count: 0 } }
//   },
//   child1: {
//     state: { count: 1 }
//     grandchild1: { state: { count: 1 } }
//     grandchild2: { state: { count: 1 } }
//   }
// }

// Rest grandchild1 state only, all other modules are ingored
this.$store.reset({ 
  self: false,
  // nested: false,
  modules: { 
    child1: {
      modules: {
        grandchild1: { self: true }
      }
    } 
  }
})
// {
//   state: { count: 1 },
//   child1: { 
//     state: { count: 1 }
//     grandchild1: { state: { count: 0 } }
//     grandchild2: { state: { count: 1 } }
//   },
//   child1: {
//     state: { count: 1 }
//     grandchild1: { state: { count: 1 } }
//     grandchild2: { state: { count: 1 } }
//   }
// }

Related Packages

@ianwalter/vuex-reset

A Vuex plugin that makes restoring initial state to the store simple

17,510 26
spyfu-vuex-helpers

Utility functions for Vuex.

2,459 9
vuex-pathify

Ridiculously simple Vuex setup + wiring

322,817 1,358
direct-vuex

Use and implement your Vuex store with TypeScript types. Compatible with the Vue...

90,286 255
@enso-ui/mixins

Enso mixins

12,227 1

Version History

Version Released Vue License
4.1.0 ^3.0.0 MIT
4.0.0 ^3.0.0 MIT
1.2.2 ^2.6.11 MIT
1.2.1 ^2.6.11 MIT
1.1.5 ^2.6.11 MIT
Pre-releases (8)
Version Released Vue License
4.0.0-beta ^3.0.0 MIT
1.1.4-beta ^2.6.11 MIT
1.1.3-beta ^2.6.11 MIT
1.1.2-beta ^2.6.11 MIT
1.1.1-beta ^2.6.11 MIT