Vuex從入門到熟練使用

本文github地址
首先我問看下完整的Vuex選項(xiàng)對象

new Vuex.Store({
  state,  //訪問狀態(tài)對象
  mutations,  //訪問觸發(fā)狀態(tài)
  getters,
  actions
});
//還有一個(gè)模塊的
export default new Vuex.Store({
  modules:{
    a:moduleA
  }
});

一、 state --- 訪問狀態(tài)對象

說明:也就是使用vuex中的數(shù)據(jù)
**1. **直接在組件中使用{{ $store.state.num }}
**2. **需要使用數(shù)據(jù)的組組件(此處是App.vue)中的計(jì)算屬性

a. 方式一
computed: {
    count(){
      return this.$store.state.num + ':方式一獲取的state數(shù)據(jù)';//this指的是main.js中的vue實(shí)例對象
    }
  }
b. 方式二冕碟,利用mapState
  import {mapState} from 'vuex'

  computed:mapState({
    // es箭頭函數(shù)寫法迫悠,好處箭頭函數(shù)中的this有穿透效果庵芭,直接是上上級
    // count: state => state.num + ':方式二獲取的state數(shù)據(jù)'
    // es5寫法
    count:function (state) {
      return state.num + ':方式二獲取的state數(shù)據(jù)'
    }
  })
c. 方式三,不對數(shù)據(jù)進(jìn)行計(jì)算(加工處理)全蝶,當(dāng)數(shù)據(jù)較多的時(shí)候,數(shù)組形式
  computed:mapState([
    'counut'//這里必須state中的數(shù)據(jù)和此模板中的數(shù)據(jù)一個(gè)名字,也就類似組件定義的簡寫
  ])  
d. 方式四,不對數(shù)據(jù)進(jìn)行計(jì)算 芽卿,當(dāng)數(shù)據(jù)較多的時(shí)候,json形式
推薦
  computed:mapState({
     count:'num'
  })

效果如下圖:


二揭芍、 Mutations--- 觸發(fā)狀態(tài)

說明:必須用commit觸發(fā)mutations中的方法
需求:在組件中傳入一個(gè)值給store.js

<button type="button" name="buttonAdd" @click="$store.commit('add',{a:10})">加一個(gè)</button>

const mutations = {
  //定義方法 --- 類似methods
  add(state,n){//state 是把上面的數(shù)據(jù)引入進(jìn)來的
    console.log(n);//傳入的第二參數(shù)的那個(gè)對象
    state.num+= n.a;
  }
}
1. 利用mapMutations引入sotre中的觸發(fā)狀態(tài)
<button type="button" name="buttonAdd" @click="add({a:10})">map=>加一個(gè)</button><!-- 傳值的話只需要在括號(hào)里傳,但要注意格式 -->
      <button type="button" name="buttonAdd" @click="minus">map=>減一個(gè)</button>

import {mapMutations} from 'vuex'

//因?yàn)榉椒ㄋ詫懺诮M件中的methods中
 methods:mapMutations([
     'add',
     'minus'
   ])

三卸例、 getters --- 獲取者

注意:在vue2.x中的computed中不要使用箭頭函數(shù)称杨,因?yàn)榧^函數(shù)中的this指的是上一層不是本層肌毅。
//組件中
import {mapGetters} from 'vuex'

computed:{
    /*count(){
      return this.$store.getters.num
    }*/
    //map對象方式獲取getters
    ...mapGetters({
      count:'num'//引進(jìn)是靜態(tài)的
    })
  },
//store.js文件中
const getters = {
  num:function (state) {
    return state.num;
  }
}
export default new Vuex.Store({
  state,
  mutations,
  getters
});

注意:..mapGetters({})使用了三個(gè)點(diǎn)“...”,由于vue-cli生成的依賴包中不能解析此語法姑原,所以需要進(jìn)行如下配置悬而。

  1. npm install babel-preset-stage-2 --save-dev
  2. 在.babelrc文件中加一個(gè)配置
["stage-2"]

四、 actions --- 異步狀態(tài)

和Mutations的區(qū)別是Mutations是同步狀態(tài)页衙,Actions是異步狀態(tài)摊滔,可以調(diào)用Mutations中的狀態(tài),異步的批處理的一個(gè)集合店乐。

//組件中
<button type="button" name="buttonAdd" @click="addPlus">addPlus =>加二個(gè)</button>
      <button type="button" name="buttonAdd" @click="minusPlus">minusPlus</button>

import {mapActions} from 'vuex'

 methods:{
     ...mapMutations([
       'add',
       'minus'
     ]),
     ...mapActions([
       'addPlus',
     ]),
     ...mapActions({
       minusPlus:'minusPlus'
     })
   }

//store.js中
const actions = {
  addPlus(context){//context代表了整個(gè)的store
    context.commit('add',{a:2}); //每次加2
    setTimeout(()=>{
        context.commit('minus');
    },3000)
    console.log('Actions中的加');
  },
  minusPlus({commit}){//commit
    commit('minus')
  }
}
export default new Vuex.Store({
  state,
  mutations,
  getters,
  actions
});

五艰躺、 module --- 模塊化

當(dāng) state, mutations, getters,actions太多的時(shí)候,我們就需要分成不同組別的模塊組眨八。

//組件中
  A模塊組中的num => {{  $store.state.a.numA }} 
  B模塊組中的num => {{  $store.state.b.numB }}
//store.js中
const moduleA ={
  state: {
    numA: 888
  }
}
const moduleB ={
  state: {
    numB: 666
  }
}

export default new Vuex.Store({
  modules:{
    a:moduleA,
    b:moduleB
  }
});

最終demo如下圖:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腺兴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子廉侧,更是在濱河造成了極大的恐慌页响,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件段誊,死亡現(xiàn)場離奇詭異闰蚕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)连舍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門没陡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人索赏,你說我怎么就攤上這事盼玄。” “怎么了潜腻?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵埃儿,是天一觀的道長。 經(jīng)常有香客問我融涣,道長童番,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任威鹿,我火速辦了婚禮妓盲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘专普。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布估蹄。 她就那樣靜靜地躺著藐鹤,像睡著了一般叛甫。 火紅的嫁衣襯著肌膚如雪傍睹。 梳的紋絲不亂的頭發(fā)上吞瞪,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天偷拔,我揣著相機(jī)與錄音廓块,去河邊找鬼蚌堵。 笑死买决,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吼畏。 我是一名探鬼主播督赤,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泻蚊!你這毒婦竟也來了躲舌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤性雄,失蹤者是張志新(化名)和其女友劉穎没卸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秒旋,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡约计,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迁筛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煤蚌。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瑰煎,靈堂內(nèi)的尸體忽然破棺而出铺然,到底是詐尸還是另有隱情,我是刑警寧澤酒甸,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布魄健,位于F島的核電站,受9級特大地震影響插勤,放射性物質(zhì)發(fā)生泄漏沽瘦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一农尖、第九天 我趴在偏房一處隱蔽的房頂上張望析恋。 院中可真熱鬧,春花似錦盛卡、人聲如沸助隧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽并村。三九已至巍实,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哩牍,已是汗流浹背棚潦。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膝昆,地道東北人丸边。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像荚孵,于是被迫代替她去往敵國和親妹窖。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

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

  • 安裝 npm npm install vuex --save 在一個(gè)模塊化的打包系統(tǒng)中处窥,您必須顯式地通過Vue.u...
    蕭玄辭閱讀 2,937評論 0 7
  • Vuex是什么嘱吗? Vuex 是一個(gè)專為 Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件...
    蕭玄辭閱讀 3,114評論 0 6
  • vuex 場景重現(xiàn):一個(gè)用戶在注冊頁面注冊了手機(jī)號(hào)碼滔驾,跳轉(zhuǎn)到登錄頁面也想拿到這個(gè)手機(jī)號(hào)碼谒麦,你可以通過vue的組件化...
    sunny519111閱讀 8,015評論 4 111
  • 系列文章:Vue 2.0 升(cai)級(keng)之旅Vuex — The core of Vue applic...
    6ed7563919d4閱讀 4,549評論 2 58
  • Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài)哆致,并以相應(yīng)...
    白水螺絲閱讀 4,667評論 7 61