vuex處理異部事件要使用actions,同步使用mutations;
在使用chrome的vue的插件中可以查看state值的狀態(tài);
發(fā)現(xiàn)使用actions數(shù)據(jù)與頁(yè)面是對(duì)應(yīng)的;mutations總是顯示上一次操作的最后結(jié)果;
但是在界面顯示效果中,兩者沒(méi)有任何區(qū)別;為什么會(huì)這樣?什么情況下可以看出兩者的區(qū)別?
test.vue
<template>
<div>
<div style="border: 1px solid #ddd;padding: 10px;margin-bottom: 20px;">
<h2>mutations處理異步操作</h2>
<button type="text" @click="reduce(10)">-</button>
<span>{{count}}</span>
<button type="text" @click="addIncrement(10)">+</button>
<p> 限制數(shù)字: {{limitNum}}</p>
</div>
<div style="border: 1px solid #ddd;padding: 10px;margin-bottom: 20px;">
<h2>actions處理異步操作</h2>
<button type="text" @click="reduceAction(10)">-</button>
<span>{{count2}}</span>
<button type="text" @click="addAction(10)">+</button>
<p> 限制數(shù)字: {{limitNum2}}</p>
</div>
</div>
</template>
<script>
import {mapState,mapMutations,mapActions,mapGetters} from "vuex"
export default {
name: 'app',
data () {
return {
}
},
computed:{
...mapState(["count","count2"]),
...mapGetters(["limitNum","limitNum2"])
},
methods:{
...mapMutations(["addIncrement","reduce"]), // 同步
...mapActions(["addAction","reduceAction"]) //異步
},
created:function(){
}
}
</script>
<style>
</style>
store/index.js 中的內(nèi)容
/**
* Created by Administrator on 2018/1/19.
*/
import Vue from "vue"
import Vuex from "vuex"
Vue.use(Vuex);
var store =new Vuex.Store({ //注意這里的Store是大寫(xiě)
state:{
count:100,
count2:100
},
mutations:{
addIncrement:function(state,n){
setTimeout(function(){
state.count+=n;
},600)
},
reduce:function(state,n){
setTimeout(function(){
state.count-=n;
},600)
},
addIncrement2:function(state,n){
state.count2+=n;
},
reduce2:function(state,n){
state.count2-=n;
},
},
actions:{
addAction:function(context,n){
setTimeout(function(){
context.commit("addIncrement2",n);
},600)
},
reduceAction:function(context,n){
setTimeout(function(){
context.commit("reduce2",n);
},600)
},
},
getters:{
limitNum:function(state){
var a=state.count>120?120:state.count;
return a;
},
limitNum2:function(state){
var a=state.count2>120?120:state.count2;
return a;
}
}
})
export default store
https://vuex.vuejs.org/zh-cn/...
引用文檔的話
Mutation 必須是同步函數(shù)
一條重要的原則就是要記住 mutation 必須是同步函數(shù)。為什么?請(qǐng)參考下面的例子:
mutations: {
someMutation (state) {
api.callAsyncMethod(() => {
state.count++
})
}
}
現(xiàn)在想象,我們正在 debug 一個(gè) app 并且觀察 devtool 中的 mutation 日志。每一條 mutation 被記錄,devtools 都需要捕捉到前一狀態(tài)和后一狀態(tài)的快照。然而,在上面的例子中 mutation 中的異步函數(shù)中的回調(diào)讓這不可能完成:因?yàn)楫?dāng) mutation 觸發(fā)的時(shí)候,回調(diào)函數(shù)還沒(méi)有被調(diào)用,devtools 不知道什么時(shí)候回調(diào)函數(shù)實(shí)際上被調(diào)用——實(shí)質(zhì)上任何在回調(diào)函數(shù)中進(jìn)行的狀態(tài)的改變都是不可追蹤的。
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。