如何在模块之间重用 Vuex 状态字段/动作/突变?

问题描述 投票:0回答:0

所以我不知道做这样的事情的 Vuex 最佳实践 - 如果有,请随时留下链接,以便我做进一步的研究。

我需要的是能够在 2 个(或可能更多)Vuex 模块之间重复使用一组 Vuex

fields/actions/mutations
。我有一个应用程序,其 Vuex 模块的状态与其 API 调用模式紧密耦合。

也许“最佳实践”解决方案是使用我需要的

fields/actions/mutations
创建一个单独的 Vuex 模块,但是新模块的字段无论如何都必须添加到其他模块的状态以进行 API 调用,这使得单独的模块成为可能似乎麻烦多于它的价值。

这是一个基本的例子:

// TodosModule.js

export default {
  state: {
    todos: [],
  },

  actions: {
    async saveTodos({ state }) {
      await this.Api.saveTodos(state.todos);
    },

    setTodos({ commit }, newTodos) {
      commit('SET_TODOS', newTodos);
    },
  },

  mutations: {
    SET_TODOS(state, newTodos) {
      Vue.set(state, 'todos', newTodos);
    },
  },
};
// HeroesModule.js

export default {
  state: {
    heroes: [],
  },

  actions: {
    async saveHeroes({ state }) {
      await this.Api.saveHeroes(state.heroes);
    },

    setHeroes({ commit }, newHeroes) {
      commit('SET_HEROES', newHeroes);
    },
  },

  mutations: {
    SET_HEROES(state, newHeroes) {
      Vue.set(state, 'heroes', newHeroes);
    },
  },
};

我需要能够向两个模块添加一组字段,因为它们的 API 调用中需要这些字段。可能看起来像:

// TodosModule.js

export default {
  state: {
    todos: [],
    
    // shared fields are declared somewhere up here
  },

  ...

  actions: {
    async saveTodos({ state }) {
      await this.Api.saveTodos({
        todos: state.todos,
        sharedFieldOne: state.sharedFieldOne,
        sharedFieldTwo: state.sharedFieldTwo,
      });
    },
  },
};

什么是最佳实践或最干的方法?

编辑:我应该澄清 - 我只希望将字段放入模块 - 我不希望字段在模块之间共享相同的值。意思是,我不希望一个模块中的值发生变化,因为它在另一个模块中发生了变化。他们应该是他们自己的个人参考。

Vuex 文档有这一部分: https://vuex.vuejs.org/guide/modules.html#module-reuse

但这似乎指的是我不想要的那种异花授粉。似乎一个值在该字段的所有实例之间共享。

vue.js redux module vuex vuex-modules
© www.soinside.com 2019 - 2024. All rights reserved.