欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vuex命名空間的使用

 更新時間:2021年09月29日 09:21:17   作者:HappyCodingTop  
本文主要介紹了vuex命名空間的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Vuex由于使用單一狀態(tài)樹,應用的所有狀態(tài)會集中到一個比較大的對象。當應用變得非常復雜時,store 對象就有可能變得相當臃腫。

因此,Vuex 允許我們將 store 分割成模塊(module),每個模塊擁有自己的 state、mutation、action、getter、甚至是嵌套子模塊。

默認情況下,模塊內(nèi)部的 action、mutation 和 getter 是注冊在全局命名空間的,這樣使得多個模塊能夠?qū)ν?mutation 或 action 作出響應。如果希望你的模塊具有更高的封裝度和復用性,此時就用到了命名空間這個概念。

{
    "模塊1":{
        state:{},
        getters:{},
        mutations:{},
        actions:{}
    },
    "模塊2":{
        state:{},
        getters:{},
        mutations:{},
        actions:{}
    }
}

mapState、mapGetters、mapMutations、mapActions第一個參數(shù)是字符串(命名空間名稱),第二個參數(shù)是數(shù)組(不需要重命名)/對象(需要重命名)。

mapXXXs('命名空間名稱',['屬性名1','屬性名2'])

mapXXXs('命名空間名稱',{

  '組件中的新名稱1':'Vuex中的原名稱1',

  '組件中的新名稱2':'Vuex中的原名稱2',

})

項目結(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: "藍白英短",
    age: 1
  },
  // 局部讀取
  getters: {
    desc: state => "寵物:" + state.name
  },
  // 局部變化
  mutations: {
    increment(state, payload) {
      state.age += payload.num;
    }
  },
  // 局部動作
  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;
    }
  },
  // 局部動作
  actions: {
    grow(context, payload) {
      setTimeout(() => {
        context.commit("increment", payload);
      }, 1000);
    }
  }
};

hello.vue

<template>
  <div class="hello">
    <h3>Vuex狀態(tài)樹</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})">貓動作</button>
    <button @click="dogGrow({num:1})">狗動作</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>

運行效果

到此這篇關于vuex命名空間的使用的文章就介紹到這了,更多相關vuex命名空間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解vue-validator(vue驗證器)

    詳解vue-validator(vue驗證器)

    本篇文章主要介紹了vue-validator(vue驗證器),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 詳解使用webpack打包編寫一個vue-toast插件

    詳解使用webpack打包編寫一個vue-toast插件

    本篇文章主要介紹了詳解使用webpack打包編寫一個vue插件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • vue項目啟動端口更改的實現(xiàn)

    vue項目啟動端口更改的實現(xiàn)

    在Vue前端項目中,可以通過修改配置文件來指定啟動的端口號,本文就來介紹 一下vue項目啟動端口更改的實現(xiàn),感興趣的可以了解一下
    2023-10-10
  • 基于Vue.js 實現(xiàn)簡易拖拽指令

    基于Vue.js 實現(xiàn)簡易拖拽指令

    在 Vue.js 中,我們可以通過自定義指令的方式來實現(xiàn)拖拽功能,使得代碼更加模塊化和可復用,本文將介紹如何基于 Vue.js 實現(xiàn)一個簡易的拖拽指令,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 解決vue+webpack項目接口跨域出現(xiàn)的問題

    解決vue+webpack項目接口跨域出現(xiàn)的問題

    這篇文章主要介紹了解決vue+webpack項目接口跨域出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue中表格設置某列樣式、不顯示表頭問題

    vue中表格設置某列樣式、不顯示表頭問題

    這篇文章主要介紹了vue中表格設置某列樣式、不顯示表頭問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 使用VUE實現(xiàn)在table中文字信息超過5個隱藏鼠標移到時彈窗顯示全部

    使用VUE實現(xiàn)在table中文字信息超過5個隱藏鼠標移到時彈窗顯示全部

    這篇文章主要介紹了使用VUE實現(xiàn)在table中文字信息超過5個隱藏,鼠標移到時彈窗顯示全部,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • vue圖片上傳組件使用詳解

    vue圖片上傳組件使用詳解

    這篇文章主要為大家詳細介紹了vue圖片上傳組件的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 詳解如何使用Object.defineProperty實現(xiàn)簡易的vue功能

    詳解如何使用Object.defineProperty實現(xiàn)簡易的vue功能

    這篇文章主要為大家介紹了如何使用Object.defineProperty實現(xiàn)簡易的vue功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Vue中JSX的基本用法及高級部分

    Vue中JSX的基本用法及高級部分

    JSX是一種Javascript的語法擴展,JSX = Javascript + XML,即在 Javascript里面寫XML,因為 JSX 的這個特性,所以他即具備了 Javascript的靈活性,同時又兼具html的語義化和直觀性,這篇文章主要給大家介紹了關于Vue中JSX的基本用法及高級部分的相關資料,需要的朋友可以參考下
    2022-11-11

最新評論