在上篇中,我們可以知道如果想要訪問vuex.store中state中的數據,需要this.$store.state.屬性名。顯然這樣訪問數據寫的代碼很很不簡潔的,輔助函數就是用來解決這個問題的。
1、輔助函數:
通過輔助函數mapState、mapActions、mapMutations,把vuex.store中的屬性映射到vue實例身上,這樣在vue實例中就能訪問vuex.store中的屬性了,對於操作vuex.store就很方便了。
state輔助函數為mapState,actions輔助函數為mapActions,mutations輔助函數為mapMutations。(Vuex實例身上有mapState、mapActions、mapMutations屬性,屬性值都是函數)
2、如何使用輔助函數
在當前組件中引入Vuex
通過Vuex來調用輔助函數
3、輔助函數如何去映射vuex.store中的屬性
1、mapState:把state屬性映射到computed身上
computed:{ ...Vuex.mapState({ input:state=>state.inputVal, n:state=>state.n }) }
屬性1:state: 用來存儲公共的狀態 在state中的數據都是響應式的。 響應式原因:state里面有一個getters、setters方法;data中的數據也是響應式的,因為里面也有getters和setters方法 輔助函數 mapState 1、在computed屬性中來接收state中的數據 接收方式有2種(數組和對象,推薦對象) computed:Vuex.mapState(["屬性"]) 把state中的數據通過mapState映射到computed組件身上 computed:Vuex.mapState({ key:state=>state.屬性 //優點:01本身key值是別名,要的是val的值,key的值a 和 val="a"一樣就行,隨意寫。 減少state里面長的屬性名。 02可以在函數內部查看state中的數據 數組方式的話,必須按照state中的屬性名 }) 2、如果自身組件也需要使用computed的話,通過解構賦值去解構出來 computed:{ ...Vuex.mapState({ key:state=>state.屬性 }) }
methods:{ ...Vuex.mapActions({ add:"handleTodoAdd", //val為actions里面的方法名稱 change:"handleInput" }) }
//直接代用add和change方法就行,不過要記得在actions里面做完數據業務邏輯的操作
之前我們還需要這樣寫一大串函數調用,
屬性2:actions: actions里面的函數主要用來處理異步的函數以及一些業務邏輯,每一個函數里面都有一個形參 這個形參是一個對象 里面有一個commit方法,這個方法用來觸發mutations里面的方法 輔助函數 mapActions 使用方式 methods:Vuex.mapActions([""]) methods:{ ...Vuex.mapActions({ key:val--->actions里面的方法名稱 }) }
3、mapMutations:把mutations里面的方法映射到methods中
只是做簡單的數據修改(例如n++),它沒有涉及到數據的處理,沒有用到業務邏輯或者異步函數,可以直接調用mutations里的方法修改數據。
methods:{ ...Vuex.mapMutations({ handleAdd:"handlMutationseAdd" }) }
屬性3:mutations: mutations里面的函數主要用來修改state中的數據。mutations里面的所以方法都會有2個參數 一個是store中的state 另外一個是需要傳遞的參數 輔助函數 mapMutations 使用方式 methods:Vuex.mapMutations([""]) methods:{ ...Vuex.mapMutations({ key:val--->actions里面的方法名稱 }) }
理解state、actions、mutations,可以參考MVC框架。state可以比喻成一個數據庫,知識它是響應式的,刷新頁面數據就會改變;actions比喻成controller層,做數據的業務邏輯;mutations比喻成model層,做數據的增刪改查操作。
4、mapGetters:把getters屬性映射到computed身上
computed:{ ...Vuex.mapGetters({ NumN:"NumN" }) }
屬性4:getters:計算屬性 getters類似於組件里面computed同時也是監聽屬性的變化,當state中的屬性發生改變的時候就會 觸發getters里面的方法。getters里面的每一個方法中都會有一個參數 state 使用方式 this.$store.getters.方法名稱 輔助函數 mapGetters mapgetters使用在組件的computed中 1、 Vuex.mapGetters(["方法名稱"]) Vuex.mapGetters({ key:val--》val就是getters中的函數名稱 })
