boenfu / vuex-along

:memo: auto save and restore state for vuex
https://boenfu.github.io/vuex-along/
MIT License
259 stars 36 forks source link

引入后发现全部state存入localStorage中 #21

Closed MadokaKami closed 5 years ago

MadokaKami commented 5 years ago

我想可能是我的操作有些问题,麻烦大佬帮忙看下。 根据项目实际业务需求,我不希望值存入localStorage中,但现在的实现方式有点复杂,请问有更简洁的方式吗。 export default new Vuex.Store({ state: { test: 'default', otherValue: 'this is other value' }, mutations: { setTest(state) { state.test = '8888888' } }, plugins: [createVuexAlong({ name: "hello-vuex-along", // 如果不传入local属性或者local.list为[],值会默认保存的localStorage中 // local: { // 这里一定要这样写才能让{@code test}属性不保存到localStorage中 list:['null'] }, session: { list: ["test"] } })] }) 我在测试的时候采用了两个子页面,页面1 setTest,页面2控制台打印$store.state.test。 通过控制台打印:console.log(localStorage) 可见,若不设置local参数,localStorage会包含test otherValue两个属性,只有为local.list设置一个不存在的属性后,才不会将全部属性默认存入list。 关于这个问题,请问有更优雅的解决方案吗。

boenfu commented 5 years ago

有一个参数 是 isFilter 如果设为 true 你list 列表里的就不会被存,其他的会被存

boenfu commented 5 years ago

如果你只想使用 session 也有一个配置项 justSession

boenfu commented 5 years ago

Readme 里面有详细的说明,希望能满足你的需求

MadokaKami commented 5 years ago

现在假如传入一个空local,不传入session 和justSession,那么默认vuex 中的全部state都会存入localStorage中,请问这种情况您之前遇到过吗。

boenfu commented 5 years ago

传空与不传一样😂 默认会存 localstorage 这是个 feature

boenfu commented 5 years ago

在 Readme 里面写了的~~

boenfu commented 5 years ago

https://github.com/boenfu/vuex-along#options

MadokaKami commented 5 years ago

不好意思我之前没有描述清楚,不是写成local:{},而是写成local:{list:[]},在我指定list 为空后,同样会把全部state传入localStorage。

boenfu commented 5 years ago
 if (!this.justSession) {
      let local = this.local;
      let localState = _.cloneDeep(state);

      if (local) {
        let { list, isFilter } = local;

        if (list.length) {
          localState = isFilter
            ? _.omit(localState, list)
            : _.pick(localState, list);
        }
      }

      this.localDBService.set(this.name, localState);
    }

这是源码部分,如果你不需要存至 local 可以不写 local 字段,将 justSession 设置为 true。因为考虑到实际场景,传空数组和不传 效果是一致的

boenfu commented 5 years ago

我想你是否只是需要这样就可以了

createVuexAlong({
      name: "hello-vuex-along", 
      session: {
       // 你的内容
      },
      justSession: true
    })
MadokaKami commented 5 years ago

嗯嗯,谢谢大佬~

boenfu commented 5 years ago

嗯 那我就先 close 了,有问题可以再联系