vuex

store.js store數(shù)據(jù)改變的唯一方法就是mutation
mutation-types.js定義一些方法
mutation.js 把處理數(shù)據(jù)邏輯方法全部放在mutations里面,使得數(shù)據(jù)和視圖分離
action.js action 提交的是 mutation,而不是直接變更狀態(tài)

state

State負責(zé)存儲整個應(yīng)用的狀態(tài)數(shù)據(jù)偷遗,一般需要在使用的時候在跟節(jié)點注入store對象方椎,后期就可以使用this.$store.state直接獲取狀態(tài)

//store為實例化生成的(main.js)
import store from './store'

new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

這個store可以理解為一個容器,包含著應(yīng)用中的state等阅酪。實例化生成store的過程是:

const mutations = {...};
const actions = {...};
const state = {...};

Vuex.Store({
  state,
  actions,
  mutation
});

后續(xù)在組件中使用的過程中,如果想要獲取對應(yīng)的狀態(tài)你就可以直接使用this.$store.state獲取,當(dāng)然扛点,也可以利用vuex提供的mapState輔助函數(shù)將state映射到計算屬性中去,如

//我是組件
import {mapState} from 'vuex'

export default {
  computed: mapState({
    count: state => state.count
  })
}

Mutations

Mutations的中文意思是“變化”岂丘,利用它可以更改狀態(tài)陵究,本質(zhì)就是用來處理數(shù)據(jù)的函數(shù),其接收唯一參數(shù)值state奥帘。store.commit(mutationName)是用來觸發(fā)一個mutation的方法铜邮。需要記住的是,定義的mutation必須是同步函數(shù)寨蹋,否則devtool中的數(shù)據(jù)將可能出現(xiàn)問題松蒜,使?fàn)顟B(tài)改變變得難以跟蹤。

const mutations = {
  mutationName(state已旧,n) {
    //在這里改變state中的數(shù)據(jù)
   state.count +=n;
  }
}

在組件中觸發(fā):

//我是一個組件
export default {
  methods: {
    handleClick() {
      this.$store.commit('mutationName')
    }
  }
}

或者使用輔助函數(shù)mapMutations直接將觸發(fā)函數(shù)映射到methods上秸苗,這樣就能在元素事件綁定上直接使用了。如:

import {mapMutations} from 'vuex'

//我是一個組件
export default {
  methods: mapMutations([
    'mutationName'
  ])
}
//es6擴展運算符
...mapMutations(['mutationName'])

Actions

Actions也可以用于改變狀態(tài)运褪,不過是通過觸發(fā)mutation實現(xiàn)的惊楼,重要的是可以包含異步操作。其輔助函數(shù)是mapActions與mapMutations類似秸讹,也是綁定在組件的methods上的檀咙。如果選擇直接觸發(fā)的話,使用this.$store.dispatch(actionName)方法嗦枢。

//定義Actions
const actions = {
  actionName({ commit }) {
    //dosomething
    commit('mutationName')
  }
}

在組件中使用

import {mapActions} from 'vuex'

//我是一個組件
export default {
  methods: mapActions([
    'actionName',
  ])
}

Getters

有些狀態(tài)需要做二次處理攀芯,就可以使用getters。通過this.$store.getters.valueName對派生出來的狀態(tài)進行訪問文虏÷屡担或者直接使用輔助函數(shù)mapGetters將其映射到本地計算屬性中去殖演。

const getters = {
  strLength: state => state.aString.length
}
//上面的代碼根據(jù)aString狀態(tài)派生出了一個strLength狀態(tài)

在組件中使用

import {mapGetters} from 'vuex'

//我是一個組件
export default {
  computed: mapGetters([
    'strLength'
  ])
}

Plugins

插件就是一個鉤子函數(shù)景殷,在初始化store的時候引入即可鲁纠。比較常用的是內(nèi)置的logger插件,用于作為調(diào)試使用俯在。

import createLogger from 'vuex/dist/logger'
const store = Vuex.Store({
  ...
  plugins: [createLogger()]
})

總結(jié)

mapState 訪問state對象
mapMutations 修改狀態(tài)(同步)
mapGetters 計算過濾操作
mapActions 修改狀態(tài)(異步)

vue文檔
http://vuex.vuejs.org/zh-cn/index.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搔确,一起剝皮案震驚了整個濱河市彼棍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膳算,老刑警劉巖座硕,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涕蜂,居然都是意外死亡华匾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門机隙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜘拉,“玉大人,你說我怎么就攤上這事有鹿⌒裥瘢” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵葱跋,是天一觀的道長持寄。 經(jīng)常有香客問我,道長年局,這世上最難降的妖魔是什么际看? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮矢否,結(jié)果婚禮上仲闽,老公的妹妹穿的比我還像新娘。我一直安慰自己僵朗,他們只是感情好赖欣,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著验庙,像睡著了一般顶吮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粪薛,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天悴了,我揣著相機與錄音,去河邊找鬼。 笑死湃交,一個胖子當(dāng)著我的面吹牛熟空,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搞莺,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼息罗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了才沧?” 一聲冷哼從身側(cè)響起迈喉,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎温圆,沒想到半個月后挨摸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡捌木,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年油坝,在試婚紗的時候發(fā)現(xiàn)自己被綠了嫉戚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刨裆。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彬檀,靈堂內(nèi)的尸體忽然破棺而出帆啃,到底是詐尸還是另有隱情,我是刑警寧澤窍帝,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布努潘,位于F島的核電站,受9級特大地震影響坤学,放射性物質(zhì)發(fā)生泄漏疯坤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一深浮、第九天 我趴在偏房一處隱蔽的房頂上張望压怠。 院中可真熱鬧,春花似錦飞苇、人聲如沸菌瘫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雨让。三九已至,卻和暖如春忿等,著一層夾襖步出監(jiān)牢的瞬間栖忠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庵寞,地道東北人虚汛。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像皇帮,于是被迫代替她去往敵國和親卷哩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 安裝 npm npm install vuex --save 在一個模塊化的打包系統(tǒng)中属拾,您必須顯式地通過Vue.u...
    蕭玄辭閱讀 2,945評論 0 7
  • Vuex是什么将谊? Vuex 是一個專為 Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應(yīng)用的所有組件...
    蕭玄辭閱讀 3,124評論 0 6
  • vuex 場景重現(xiàn):一個用戶在注冊頁面注冊了手機號碼渐白,跳轉(zhuǎn)到登錄頁面也想拿到這個手機號碼尊浓,你可以通過vue的組件化...
    sunny519111閱讀 8,022評論 4 111
  • vuex是一個狀態(tài)管理模式,通過用戶的actions觸發(fā)事件纯衍,然后通過mutations去更改數(shù)據(jù)(你也可以說狀態(tài)...
    Ming_Hu閱讀 2,026評論 3 3
  • Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式栋齿。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)...
    白水螺絲閱讀 4,672評論 7 61