robinvdvleuten / vuex-persistedstate

💾 Persist and rehydrate your Vuex state between page reloads.
https://npm.im/vuex-persistedstate
MIT License
5.76k stars 378 forks source link

Dynamic module preserveState ignores the overwrite option #311

Open zeroinformatique opened 4 years ago

zeroinformatique commented 4 years ago
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