在Vuex有四大物件元素,分別是State、Mutations、Getters、Actions

 State內負責存放初始資料,裡面可以放任何東西:物件、陣列、數值、字串...etc 只要我們後續Vuex有用到,就應該先在State宣告其存在,就算是空值、空字串、空陣列也沒關係。

因為一但在之後的Mutations突然寫了一個未先宣告的State資料,Vuex不會當場動態產生這個變數資料出來,就會報錯。 (想像成寫程式,會用到什麼都要在編輯器最上方先宣告變數存在)

但還是有辦法的,如果要臨時在Mutations新建一個State資料,要這樣寫

Vue.set(state,’資料名稱’,’ ‘值');

要讀取Vuex的值,我們會在(.Vue)組件的</script>的computed寫一些計算回傳的方法去讀值

export default {
 computed:{  //<————————寫在這裡
 count(){   //<————————要讀取的Vuex對應值的方法
 return this.$store.state.count;    //<————————每次都要寫return xxxxx
 }
 },
 methods:{
 addCount(){
 this.$store.commit('addCount’)
 }
 }
}

但是這樣,要讀取的State一多,要寫在computed的方法也會變多,所以幸Vuex有提供一些方法,例如mapState 我們可以在(.Vue)組件的</script>內引入Vuex的mapState方法


import { mapState } from 'vuex'

export default {
 computed:{ 
    //...略
 },
 methods:{

 //...略
 }
}

引入mapState後,在computed有幾種mapState的用法 1.陣列: 原本

computed:{ 
 count(){ 
 return this.$store.state.count; 
 }
 其他對應vuex值(){
 return this.$store.state.對應vuex值; 
 }
}

改成mapState( ),傳入陣列當參數 要這樣寫

computed:mapState([
 'count',
 '其他對應vuex值',
 '其他對應vuex值’,
 '其他對應vuex值',
])

mapState,會透過陣列裡的字串去vuex裡尋找值,並把它引入vue組件並轉換成computed計算方法

不過這樣寫,整個computed的值就被mapState( )佔走了,如果computed計算屬性,還有要寫其他方法呢? 總不可能computed方法寫了mapState就不能設定其他計算方法了吧? 這個時候就要用...運算子

computed:{
 aFunction1(){
 // 略...
 },
 aFunction2(){
 // 略...
 },

 ...mapState([
 'count',
 '其他對應vuex值',
 '其他對應vuex值’,
 '其他對應vuex值',
 ]) 
}

2.物件: mapState也可以傳入物件當參數,通常用在想要額外設定物件屬性, 把原本的'其他對應vuex值’變成物件的屬性值,物件的屬性我們就可以自己去名字。

例如:

computed:{
 aFunction1(){
 // 略...
 },
 aFunction2(){
 // 略...
 },
 ...mapState({
 myCount:'count',
 自己取名的屬性:'其他對應vuex值',
 自己取名的屬性:'其他對應vuex值',
})

那原本寫在HTML的{{ count }},因為變成值,就要以屬性來呼喚它, 變成這樣寫

原本:

<h2>{{ count }}</h2>

變成物件屬性的值,所以HTML的{{ }}內要放我們自己取的物件屬性名

<h2>{{ myCount }}</h2>

因為JS物件可以放函式(方法),所以還可以改成

computed:{
 aFunction1(){
 // 略...
 },
 aFunction2(){
 // 略...
 },
 ...mapState({
 myCount:'count’,

 myVal: state => state.count
 myList(state){
 return this.xxx + state.count
 },
})

所以HTML的{{ }}內也是放上方法名稱

<h2>{{ myVal }}</h2>
<h2>{{ myList }}</h2>

這麼做的目的就和computed計算屬性一樣,應該說本來就是computed計算屬性的使用目的,就是先計算再回傳直到網頁上 我們可以先透過computed方法操作Vuex值在回傳到網頁上

想用箭頭函式或一般函式都可以,只是要注意用了箭頭函式就不能用this了!