所以我不知道做这样的事情的 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
但这似乎指的是我不想要的那种异花授粉。似乎一个值在该字段的所有实例之间共享。