Vuex mutitons和actions初使用詳解
Mutations
mutations 必須是同步函數(shù),為什么?
舉個(gè)例子: 官方案例
mutations: {
someMutation (state) {
api.callAsyncMethod(() => {
state.count++
})
}
}
我們都知道任何回調(diào)函數(shù)中進(jìn)行的狀態(tài)改變都是無(wú)法追蹤的, devtools會(huì)對(duì)mutations的每一條提交做記錄,記錄上一次提交之前和提交之后的狀態(tài),在上面的例子中無(wú)法實(shí)現(xiàn)捕捉狀態(tài),因?yàn)樵趫?zhí)行mutations時(shí),內(nèi)部回調(diào)函數(shù)還沒(méi)有執(zhí)行,
所以此時(shí)無(wú)法捕捉狀態(tài).
再簡(jiǎn)單來(lái)講,就像大家都吃過(guò)核桃,核桃剛產(chǎn)下來(lái)的時(shí)候是帶一層綠色的皮的,我們需要將綠色燒掉,弄掉了,才是我們?cè)谑袌?chǎng)上見(jiàn)到的只有外面硬殼的核桃,如果我們只剝?nèi)ゾG皮,是不能直接吃的,因?yàn)檫€有一層殼胡著呢.
Actions
vuex肯定不甘示弱,為了解決mutations只有同步的問(wèn)題,提出了actions(異步),專(zhuān)門(mén)用來(lái)解決mutations只有同步無(wú)異步的問(wèn)題.
1. 首先先了解一下actions
(1).MUTATIONS
const state = {
xxx: null
},
const mutations = {
[setState](state, value) {
state.xxx = value
}
}
此處value可以是對(duì)象,可以是值等
組件調(diào)用方式: this.$store.commit('setState', [value])
(2).ACTIONS
// 第一種寫(xiě)法簡(jiǎn)寫(xiě)形式
const actions = {
[addPlus]({commit}) { // 簡(jiǎn)寫(xiě)方式,待研究
commit('[setState]', value)
//此處value可以是對(duì)象,可以是固定值等
}
}
// 第二種形式
const actions = {
[addPlus](context) {
//context 官方給出的指定對(duì)象, 此處context可以理解為store對(duì)象
context.commit('[setState]', value)
}
}
/* 兩處的commit都是提交的mutations中的字符串的事件類(lèi)型名稱(chēng),對(duì)應(yīng)會(huì)調(diào)用mutations中的回調(diào)函數(shù) */
actions在組件中的調(diào)用方式:
import mapActions from 'vuex'
methods: {
...mapActions: ([
'addPlus'
]),
setAddPlus () {
this.$store.dispatch('addPlus', [value]) // 異步調(diào)用mutations
}
}
Vuex 狀態(tài)管理
Vuex 依賴(lài)于 Vue 用來(lái)管理 Vue 項(xiàng)目狀態(tài)
狀態(tài)的修改依賴(lài)于 commit 和 dispatch
import Vue from 'Vue';
import Vuex from 'Vuex';
export default new Vuex.Store({
state:{
count:100
},
mutations:{
change(state,payload){
state.count += payload;
}
},
actions:{
change(context,palyload){
context.commit('change',palyload);// 異步觸發(fā) mutaiton
}
},
getters:{
getCount(){
return state.count;
}
}
})
{{$store.state.count}}
<button @click="commitChange">更改count</button>
<button @click="dispatchChange">更改count</button>
...
methods:{
commitChange(){
this.$store.commit('change',1);
},
dispatchChange(){
this.$sotre.dispatch('change',10);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 淺談vuex actions和mutation的異曲同工
- vuex2中使用mapGetters/mapActions報(bào)錯(cuò)的解決方法
- vue-cli整合vuex的時(shí)候,修改actions和mutations,實(shí)現(xiàn)熱部署的方法
- vuex actions傳遞多參數(shù)的處理方法
- vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
- 詳解vuex中mapState,mapGetters,mapMutations,mapActions的作用
- Vuex中mutations與actions的區(qū)別詳解
- vuex學(xué)習(xí)之Actions的用法詳解
相關(guān)文章
VUE3+TS遞歸組件實(shí)現(xiàn)TreeList設(shè)計(jì)實(shí)例詳解
這篇文章主要為大家介紹了VUE3+TS遞歸組件實(shí)現(xiàn)TreeList設(shè)計(jì)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
vue項(xiàng)目不能使用localhost訪問(wèn)的解決
這篇文章主要介紹了vue項(xiàng)目不能使用localhost訪問(wèn)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
vue.js this.$router.push獲取不到params參數(shù)問(wèn)題
這篇文章主要介紹了vue.js this.$router.push獲取不到params參數(shù)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
關(guān)于vue利用postcss-pxtorem進(jìn)行移動(dòng)端適配的問(wèn)題
這篇文章主要介紹了關(guān)于vue利用postcss-pxtorem進(jìn)行移動(dòng)端適配的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Vue插件實(shí)現(xiàn)過(guò)程中遇到的問(wèn)題總結(jié)
隨著Vue.js越來(lái)越火,Vue.js 的相關(guān)插件也在不斷的被貢獻(xiàn)出來(lái),數(shù)不勝數(shù),這篇文章主要給大家介紹了關(guān)于Vue插件實(shí)現(xiàn)過(guò)程中遇到的問(wèn)題,需要的朋友可以參考下2021-08-08
Vue實(shí)現(xiàn)搜索結(jié)果高亮顯示關(guān)鍵字
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)搜索結(jié)果高亮顯示關(guān)鍵字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
vue前端和Django后端如何查詢(xún)一定時(shí)間段內(nèi)的數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于vue前端和Django后端如何查詢(xún)一定時(shí)間段內(nèi)的數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

