vuex命名空間的使用
Vuex由于使用單一狀態(tài)樹(shù),應(yīng)用的所有狀態(tài)會(huì)集中到一個(gè)比較大的對(duì)象。當(dāng)應(yīng)用變得非常復(fù)雜時(shí),store 對(duì)象就有可能變得相當(dāng)臃腫。
因此,Vuex 允許我們將 store 分割成模塊(module),每個(gè)模塊擁有自己的 state、mutation、action、getter、甚至是嵌套子模塊。
默認(rèn)情況下,模塊內(nèi)部的 action、mutation 和 getter 是注冊(cè)在全局命名空間的,這樣使得多個(gè)模塊能夠?qū)ν?mutation 或 action 作出響應(yīng)。如果希望你的模塊具有更高的封裝度和復(fù)用性,此時(shí)就用到了命名空間這個(gè)概念。
{
"模塊1":{
state:{},
getters:{},
mutations:{},
actions:{}
},
"模塊2":{
state:{},
getters:{},
mutations:{},
actions:{}
}
}
mapState、mapGetters、mapMutations、mapActions第一個(gè)參數(shù)是字符串(命名空間名稱),第二個(gè)參數(shù)是數(shù)組(不需要重命名)/對(duì)象(需要重命名)。
mapXXXs('命名空間名稱',['屬性名1','屬性名2'])
mapXXXs('命名空間名稱',{
'組件中的新名稱1':'Vuex中的原名稱1',
'組件中的新名稱2':'Vuex中的原名稱2',
})
項(xiàng)目結(jié)構(gòu)

mian.js
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store/index";
Vue.config.productionTip = false;
new Vue({
router,
store,
render: h => h(App)
}).$mount("#app");
index.js
import Vue from "vue";
import Vuex from "vuex";
import cat from "./modules/cat";
import dog from "./modules/dog";
Vue.use(Vuex);
export default new Vuex.Store({
modules: { cat, dog }
});
cat.js
export default {
namespaced: true,
// 局部狀態(tài)
state: {
name: "藍(lán)白英短",
age: 1
},
// 局部讀取
getters: {
desc: state => "寵物:" + state.name
},
// 局部變化
mutations: {
increment(state, payload) {
state.age += payload.num;
}
},
// 局部動(dòng)作
actions: {
grow(context, payload) {
setTimeout(() => {
context.commit("increment", payload);
}, 1000);
}
}
};
dog.js
export default {
namespaced: true,
// 局部狀態(tài)
state: {
name: "拉布拉多",
age: 1
},
// 局部讀取
getters: {
desc: state => "寵物:" + state.name
},
// 局部變化
mutations: {
increment(state, payload) {
state.age += payload.num;
}
},
// 局部動(dòng)作
actions: {
grow(context, payload) {
setTimeout(() => {
context.commit("increment", payload);
}, 1000);
}
}
};
hello.vue
<template>
<div class="hello">
<h3>Vuex狀態(tài)樹(shù)</h3>
<div>{{this.$store.state}}</div>
<h3>mapState</h3>
<div>{{catName}} {{catAge}}</div>
<div>{{dogName}} {{dogAge}}</div>
<h3>mapGetters</h3>
<div>{{catDesc}}</div>
<div>{{dogDesc}}</div>
<h3>mapMutations</h3>
<button @click="catIncrement({num:1})">貓變化</button>
<button @click="dogIncrement({num:1})">狗變化</button>
<h3>mapActions</h3>
<button @click="catGrow({num:1})">貓動(dòng)作</button>
<button @click="dogGrow({num:1})">狗動(dòng)作</button>
</div>
</template>
<script>
import { mapState, mapGetters, mapMutations, mapActions } from "vuex";
export default {
name: "HelloWorld",
computed: {
...mapState("cat", {
catName: "name",
catAge: "age"
}),
...mapState("dog", {
dogName: "name",
dogAge: "age"
}),
...mapGetters("cat", {
catDesc: "desc"
}),
...mapGetters("dog", {
dogDesc: "desc"
})
},
methods: {
...mapMutations("cat", { catIncrement: "increment" }),
...mapMutations("dog", { dogIncrement: "increment" }),
...mapActions("cat", { catGrow: "grow" }),
...mapActions("dog", { dogGrow: "grow" })
}
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
</style>
運(yùn)行效果

到此這篇關(guān)于vuex命名空間的使用的文章就介紹到這了,更多相關(guān)vuex命名空間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解使用webpack打包編寫(xiě)一個(gè)vue-toast插件
本篇文章主要介紹了詳解使用webpack打包編寫(xiě)一個(gè)vue插件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
vue項(xiàng)目啟動(dòng)端口更改的實(shí)現(xiàn)
在Vue前端項(xiàng)目中,可以通過(guò)修改配置文件來(lái)指定啟動(dòng)的端口號(hào),本文就來(lái)介紹 一下vue項(xiàng)目啟動(dòng)端口更改的實(shí)現(xiàn),感興趣的可以了解一下2023-10-10
基于Vue.js 實(shí)現(xiàn)簡(jiǎn)易拖拽指令
在 Vue.js 中,我們可以通過(guò)自定義指令的方式來(lái)實(shí)現(xiàn)拖拽功能,使得代碼更加模塊化和可復(fù)用,本文將介紹如何基于 Vue.js 實(shí)現(xiàn)一個(gè)簡(jiǎn)易的拖拽指令,感興趣的朋友跟隨小編一起看看吧2024-04-04
解決vue+webpack項(xiàng)目接口跨域出現(xiàn)的問(wèn)題
這篇文章主要介紹了解決vue+webpack項(xiàng)目接口跨域出現(xiàn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
vue中表格設(shè)置某列樣式、不顯示表頭問(wèn)題
這篇文章主要介紹了vue中表格設(shè)置某列樣式、不顯示表頭問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
使用VUE實(shí)現(xiàn)在table中文字信息超過(guò)5個(gè)隱藏鼠標(biāo)移到時(shí)彈窗顯示全部
這篇文章主要介紹了使用VUE實(shí)現(xiàn)在table中文字信息超過(guò)5個(gè)隱藏,鼠標(biāo)移到時(shí)彈窗顯示全部,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
詳解如何使用Object.defineProperty實(shí)現(xiàn)簡(jiǎn)易的vue功能
這篇文章主要為大家介紹了如何使用Object.defineProperty實(shí)現(xiàn)簡(jiǎn)易的vue功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

