Cet article vous présente principalement la modularité de Vuex. L'éditeur pense que c'est plutôt bien. Maintenant, je vais le partager avec vous et vous donner une référence, j'espère que cela pourra vous aider.
1. Pourquoi la modularisation est nécessaire
Les exemples que nous avons mentionnés plus tôt sont tous réalisés dans un arbre d'état. Lorsqu'un projet est relativement important, tous les états seront rassemblés. Procurez-vous un objet relativement volumineux, qui devient gonflé et difficile à entretenir. Afin de résoudre ce problème, Vuex nous permet de diviser le magasin en modules. Chaque module a son propre état, mutation, action, getter, et peut même imbriquer des modules vers le bas. Regardons un exemple de modularisation typique ci-dessous
const moduleA = { state: {....}, mutations: {....}, actions: {....}, getters: {....} } const moduleB = { state: {....}, mutations: {....}, actions: {....}, getters: {....} } const store = new Vuex.Store({ modules: { a: moduleA, b: moduleB } }) store.state.a // moduleA的状态 store.state.b // moduleB的状态
const moduleA = { state: { count: 0}, mutations: { increment (state) { // state是模块的局部状态,也就是上面的state state.count++ } }, getters: { doubleCount (state, getters, rootState) { // 参数 state为当前局部状态,rootState为根节点状态 return state.count * 2 } }, actions: { incremtnIfOddRootSum ( { state, commit, rootState } ) { // 参数 state为当前局部状态,rootState为根节点状态 if ((state.cont + rootState.count) % 2 === 1) { commit('increment') } } } }
const store = new Vuex.Store({ modules: { account: { namespaced: true, state: {...}, // 模块内的状态已经是嵌套的,namespaced不会有影响 getters: { // 每一条注释为调用方法 isAdmin () { ... } // getters['account/isAdmin'] }, actions: { login () {...} // dispatch('account/login') }, mutations: { login () {...} // commit('account/login') }, modules: { // 继承父模块的命名空间 myPage : { state: {...}, getters: { profile () {...} // getters['account/profile'] } }, posts: { // 进一步嵌套命名空间 namespaced: true, getters: { popular () {...} // getters['account/posts/popular'] } } } } } })
modules: { foo: { namespaced: true, getters: { // 在这个被命名的模块里,getters被局部化了 // 你可以使用getter的第四个参数来调用 'rootGetters' someGetter (state, getters, rootSate, rootGetters) { getters.someOtherGetter // -> 局部的getter, ‘foo/someOtherGetter' rootGetters.someOtherGetter // -> 全局getter, 'someOtherGetter' } }, actions: { // 在这个模块里,dispatch和commit也被局部化了 // 他们可以接受root属性以访问跟dispatch和commit smoeActino ({dispatch, commit, getters, rootGetters }) { getters.someGetter // 'foo/someGetter' rootGetters.someGetter // 'someGetter' dispatch('someOtherAction') // 'foo/someOtherAction' dispatch('someOtherAction', null, {root: true}) // => ‘someOtherAction' commit('someMutation') // 'foo/someMutation' commit('someMutation', null, { root: true }) // someMutation } } } }
computed: { ...mapState({ a: state => state.some.nested.module.a, b: state => state.some.nested.module.b }), methods: { ...mapActions([ 'some/nested/module/foo', 'some/nested/module/bar' ]) } }
computed: { ...mapStates('some/nested/module', { a: state => state.a, b: state => state.b }) }, methods: { ...mapActions('some/nested/module',[ 'foo', 'bar' ]) }
En fait, les données du composant Vue ont le même problème, donc la solution est la même. Utilisez une fonction pour déclarer l'état du module (supporté dans la version 2.3.0+)
const MyModule = { state () { return { foo: 'far' } } }
Le contenu de la modularité est terminé ici. Cette fois, nous expliquons principalement les raisons de l'émergence des modules, comment les utiliser, les espaces de noms des modules à espace de noms global et local, l'accès local au contenu global et la carte. fonctions avec des espaces de noms. Réutilisation des fonctions et modules liés. Citationhttps://vuex.vuejs.org Documentation officielle de VuexRecommandations associées :
vuex2.0 détaillée explication de l'instance de modules
Explication détaillée de Vue + Vuex Explication détaillée de l'utilisation de l'instance vm.$nextTick
Apprendre Vuex simple et la modularisation
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!