前端vuex技術棧實戰解析總結

import {mapState,mapGetters} from 'vuex'

export default {

name: "index",

computed:{

...mapState(['count']),6

...mapGetters(['filterNumbers']),

...mapGetters({

antherNumbers:'filterNumbers'

})

}

}

如果用同一名字直接把數組作為參數,如果想改一個名字,可以傳入一個對象作為參數,結果如下:

4.3.mutation

在組件內,來自store的數據只能讀取,不能手動改變,改變store中數據唯一的途徑就是顯示的提交mutations。Vuex 中的 mutation 非常類似於事件:每個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調函數 (handler)。這個回調函數就是我們實際進行狀態更改的地方,並且它會接受 state 作為第一個參數。改變代碼如下:

// store/index.js

mutations: {

add(state){

state.count++;

}

},

// Index組件

**

**

methods:{

add(){

this.$store.commit('add');

console.log(this.count);

}

連續點擊5次增加按鈕,發現count的值也改變了。當然,我們也可以傳參進去

// store/index.js

mutations: {

add(state,n){

state.count+=n;

}

},

// Index組件

**

**

methods:{

add(){

this.$store.commit('add',10);

console.log(this.count);

}

觸發方法語句為:this.$store.commit(方法名);也可以使用輔助函數mapMutations代替:

methods:{

...mapMutations(['add']),

}

4.4.action

前面我們講過,mutation有必須同步執行這個限制,我們在業務需求中有時候需要在獲取ajax請求數據之後再操作或定時器操作數據,這些都屬於異步請求,要用actions來實現。具體實現如下:

// store/index.js

mutations: {

changeCount(state){

state.count=3000;

}

},

actions: {

changeCount3000s(context){

setTimeout(()=>{

context.commit('changeCount')

},3000)

// Index組件

methods:{

...mapMutations(['add']),

changeCount3000s(){

this.$store.dispatch('changeCount3000s');

}

}

我們在點擊按鈕3s後count的值改變為3000,我們可以通過this.$store.dispatch(方法名)來觸發事件,也可以通過輔助函數mapActions來觸發。

import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'

methods:{

...mapMutations(['add']),

...mapActions(['changeCount3000s'])

}

學會以上幾個屬性的使用基本就可以滿足平時業務中的需求了,但使用Vuex會有一定的門檻和複雜性,它的主要使用場景是大型單頁面應用,如果你的項目不是很複雜,用一個bus也可以實現數據的共享,但是它在數據管理,維護,還只是一個簡單的組件,而Vuex可以更優雅高效地完成狀態管理,所以,是否使用Vuex取決於你的團隊和技術儲備。

結語

感謝您的觀看,如有不足之處,歡迎批評指正。


分享到:


相關文章: