vuex-persistedstate icon indicating copy to clipboard operation
vuex-persistedstate copied to clipboard

Dynamic module preserveState ignores the overwrite option

Open zeroinformatique opened this issue 5 years ago • 0 comments
trafficstars

  • vuex-persistedstate version: 3.1.0
  • node version: 12.18.1
  • npm version: 6.14.5
store.registerModule("myModule", extractVuexModule(MyModule).myModule, { preserveState: true });

I register a dynamic module with this command. When preserveState is false, the state is overwritten by the default store values (this is okay). When preserveState is true, the state is overwritten by the state persisted in the localStore. Since I use paths, the state is not complete; some keys in the state are now undefined.

My options when declaring createPersistedState says explicitly overwrite: false, so based on my understanding, it should deepMerge the localStore with the currently active state (which is the default values when registering the module) : but it doesn't.

Vue crashes because some keys are undefined. I had to create a new init() mutation to fix the store after the module creation:

  @mutation init() {
    if (!this.searchForm) this.searchForm = new SearchForm(); // This property is persisted
    this.loading = false;
    this.lines = [];
  }

Suggested solution: Perform a deepMerge instead of an overwrite when registering new modules dynamically with preserveState: true and overwrite: false

zeroinformatique avatar Aug 20 '20 17:08 zeroinformatique