模塊化+命名空間
1, 目的: 讓代碼更好維護
2, 修改store.js
store/Count.js:
注意:namespaced:true, 開啟命名空間
export default { namespaced:true, //準備actions--用于響應組件中的動作 actions:{ increment(context,value){ context.commit('INCREMENT',value) //commit中的increment: 對應mutations中的increment方法 } }, //準備mutations--用于操作數據(state) mutations:{ INCREMENT(state,value){ state.sum += value console.log(value,state.sum); }, DEINCREMENT(state,value){ console.log("a",value); state.sum -= value } }, //準備state = {} state:{ sum:1, school:"南昌雅騰", subject: "java" }, //準備getters , 用于加工state中的數據, 類似于computed屬性 getters:{ bigSum(state){ return state.sum * 10 } } }
2, store/index.js
//該文件用于創(chuàng)建Vuex中最為核心 的store //引入vue import Vue from "vue"; //引入vuex庫 import Vuex from "vuex"; // 使用vuex Vue.use(Vuex) //讓各個組件中擁有store屬性 import CountAbout from './Count' export default new Vuex.Store({ modules:{ CountAbout //......同理,可以引入其它vuex } })
3. 開啟命名空間后,組件中讀取state數據:
//方式一: 自己直接讀取 this.$store.state.CountAbout.school //方法二: 借助mapState讀取 ...mapState('CountAbout',['sum','school','subject'])
4, 開啟命名空間后,組件中讀取getters數據
//方式一: 自己直接讀取 this.$store.getters['CountAbout/bigSum'] //方法二: 借助mapGetters讀取 ...mapGetters('CountAbout',['bigSum'])
5, 開啟命名空間后,組件中調用dispatch
//方式一: 自己直接讀取 this.$store.dispatch('CountAbout/increment') //方法二: 借助mapGetters讀取 ...mapActions('CountAbout',['increment'])
6, 開啟命名空間后,組件中調用commit
//方式一: 自己直接讀取 this.$store.commit('CountAbout/DEINCREMENT') //方法二: 借助mapGetters讀取 ...mapMutations('CountAbout',['DEINCREMENT']),
詳細借助調用:
import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'
<template> <div> <p>當前的和是:{{sum}}</p> <p>當前的和*10的結果是:{{bigSum}}</p> <p>我在{{school}}, 學習{{subject}}</p> <select v-model.number="n"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> <button @click="increment(n)">加一</button> <button @click="DEINCREMENT(n)">減一</button> </div> </template> <script> import {mapState,mapGetters,mapMutations,mapActions} from 'vuex' export default { name:'Count', data() { return { n:1 } }, methods:{ //程序員自己寫 // deincrement(){ // this.$store.commit('DEINCREMENT',this.n) // //commit中的increment: 對應store.js中mutations中的increment方法 // //如果不需要actions做什么(即不需要服務員做什么), 可以直接找后廚 // }, //借助mapMutations生成對應的方法,方法中會調用commit去聯系mutations(對象寫法) // ...mapMutations({'DEINCREMENT':'DEINCREMENT'}) //借助mapMutations生成對應的方法,方法中會調用commit去聯系mutations(數組寫法) ...mapMutations('CountAbout',['DEINCREMENT']), //注意,以上調用方法要傳值 //程序員自己寫 // increment(){ // this.$store.dispatch('increment',this.n) // //dispatch中的increment: 對應store.js中actions中的increment方法 // }, //借助mapActions生成對應的方法,方法中會調用dispatch去聯系actions(對象寫法) // ...mapActions({'increment':'increment'}) //借助mapActions生成對應的方法,方法中會調用dispatch去聯系actions(數組寫法) ...mapActions('CountAbout',['increment']) }, computed:{ //借助mapState生成計算屬性, 從state中讀取數據(對象寫法) // ...mapState({sum:'sum',school:'school',subject:'subject'}), //借助mapState生成計算屬性, 從state中讀取數據(數組寫法) ...mapState('CountAbout',['sum','school','subject']), //以上相當于下面的寫法 // sum(){ // return this.$store.state.sum // }, // school(){ // return this.$store.state.school // }, // subject(){ // return this.$store.state.subject // } //借助mapGetters生成計算屬性, 從getters中讀取數據(對象寫法) // ...mapGetters({bigSum:'bigSum'}) //借助mapGetters生成計算屬性, 從getters中讀取數據(數組寫法) ...mapGetters('CountAbout',['bigSum']) //以上相當于下面的寫法 // ,bigSum(){ // return this.$store.getters.bigSum // } }, mounted() { const x = mapState({sum:'sum',school:'school',subject:'subject'}) console.log(x); }, } </script> <style> </style>