Vuex基本使用

1.Vuex概述

Vuex是實(shí)現(xiàn)組件全局狀態(tài)(數(shù)據(jù))管理的一種機(jī)制瓷叫,可以方便的實(shí)現(xiàn)組件之間的數(shù)據(jù)共享

使用Vuex管理數(shù)據(jù)的好處:
A.能夠在vuex中集中管理共享的數(shù)據(jù)樟插,便于開(kāi)發(fā)和后期進(jìn)行維護(hù)
B.能夠高效的實(shí)現(xiàn)組件之間的數(shù)據(jù)共享,提高開(kāi)發(fā)效率
C.存儲(chǔ)在vuex中的數(shù)據(jù)是響應(yīng)式的捧颅,當(dāng)數(shù)據(jù)發(fā)生改變時(shí)景图,頁(yè)面中的數(shù)據(jù)也會(huì)同步更新

2.Vuex的基本使用

創(chuàng)建帶有vuex的vue項(xiàng)目,打開(kāi)終端碉哑,輸入命令:vue ui
當(dāng)項(xiàng)目?jī)x表盤打開(kāi)之后挚币,我們點(diǎn)擊頁(yè)面左上角的項(xiàng)目管理下拉列表,再點(diǎn)擊Vue項(xiàng)目管理器
點(diǎn)擊創(chuàng)建項(xiàng)目扣典,如下圖所示
第一步妆毕,設(shè)置項(xiàng)目名稱和包管理器


創(chuàng)建vuex項(xiàng)目01.png

第二步,設(shè)置手動(dòng)配置項(xiàng)目

創(chuàng)建vuex項(xiàng)目02.png

第三步贮尖,設(shè)置功能項(xiàng)


創(chuàng)建vuex項(xiàng)目03.png

創(chuàng)建vuex項(xiàng)目04(1).png

第四步笛粘,創(chuàng)建項(xiàng)目


創(chuàng)建vuex項(xiàng)目05.png

3.使用Vuex完成計(jì)數(shù)器案例

打開(kāi)剛剛創(chuàng)建的vuex項(xiàng)目,找到src目錄中的App.vue組件湿硝,將代碼重新編寫如下:

<template>
  <div>
    <my-addition></my-addition>

    <p>----------------------------------------</p>

    <my-subtraction></my-subtraction>
  </div>
</template>

<script>
import Addition from './components/Addition.vue'
import Subtraction from './components/Subtraction.vue'

export default {
  data() {
    return {}
  },
  components: {
    'my-subtraction': Subtraction,
    'my-addition': Addition
  }
}
</script>

<style>
</style>

在components文件夾中創(chuàng)建Addition.vue組件薪前,代碼如下:

<template>
    <div>
        <h3>當(dāng)前最新的count值為:</h3>
        <button>+1</button>
    </div>
</template>

<script>
export default {
  data() {
    return {}
  }
}
</script>

<style>
</style>

在components文件夾中創(chuàng)建Subtraction.vue組件,代碼如下:

<template>
    <div>
        <h3>當(dāng)前最新的count值為:</h3>
        <button>-1</button>
    </div>
</template>

<script>
export default {
  data() {
    return {}
  }
}
</script>

<style>
</style>

最后在項(xiàng)目根目錄(與src平級(jí))中創(chuàng)建 .prettierrc 文件关斜,編寫代碼如下:

{
    "semi":false,
    "singleQuote":true
}

4.Vuex中的核心特性

A.State

State提供唯一的公共數(shù)據(jù)源示括,所有共享的數(shù)據(jù)都要統(tǒng)一放到Store中的State中存儲(chǔ)
例如,打開(kāi)項(xiàng)目中的store.js文件痢畜,在State對(duì)象中可以添加我們要共享的數(shù)據(jù)垛膝,如:count:0

在組件中訪問(wèn)State的方式:
1).this.$store.state.全局?jǐn)?shù)據(jù)名稱  如:this.$store.state.count
2).先按需導(dǎo)入mapState函數(shù): import { mapState } from 'vuex'
然后數(shù)據(jù)映射為計(jì)算屬性: computed:{ ...mapState(['全局?jǐn)?shù)據(jù)名稱']) }

B.Mutation

Mutation用于修改變更$store中的數(shù)據(jù)
使用方式:
打開(kāi)store.js文件鳍侣,在mutations中添加代碼如下

mutations: {
    add(state,step){
      //第一個(gè)形參永遠(yuǎn)都是state也就是$state對(duì)象
      //第二個(gè)形參是調(diào)用add時(shí)傳遞的參數(shù)
      state.count+=step;
    }
  }

然后在Addition.vue中給按鈕添加事件代碼如下:

<button @click="Add">+1</button>

methods:{
  Add(){
    //使用commit函數(shù)調(diào)用mutations中的對(duì)應(yīng)函數(shù),
    //第一個(gè)參數(shù)就是我們要調(diào)用的mutations中的函數(shù)名
    //第二個(gè)參數(shù)就是傳遞給add函數(shù)的參數(shù)
    this.$store.commit('add',10)
  }
}

使用mutations的第二種方式:
import { mapMutations } from 'vuex'

methods:{
...mapMutations(['add'])
}
如下:

import { mapState,mapMutations } from 'vuex'

export default {
  data() {
    return {}
  },
  methods:{
      //獲得mapMutations映射的sub函數(shù)
      ...mapMutations(['sub']),
      //當(dāng)點(diǎn)擊按鈕時(shí)觸發(fā)Sub函數(shù)
      Sub(){
          //調(diào)用sub函數(shù)完成對(duì)數(shù)據(jù)的操作
          this.sub(10);
      }
  },
  computed:{
      ...mapState(['count'])
      
  }
}

C.Action

在mutations中不能編寫異步的代碼吼拥,會(huì)導(dǎo)致vue調(diào)試器的顯示出錯(cuò)倚聚。
在vuex中我們可以使用Action來(lái)執(zhí)行異步操作。
操作步驟如下:
打開(kāi)store.js文件扔罪,修改Action秉沼,如下:

actions: {
  addAsync(context,step){
    setTimeout(()=>{
      context.commit('add',step);
    },2000)
  }
}

然后在Addition.vue中給按鈕添加事件代碼如下:

<button @click="AddAsync">...+1</button>

methods:{
  AddAsync(){
    this.$store.dispatch('addAsync',5)
  }
}

第二種方式:
import { mapActions } from 'vuex'

methods:{
...mapMutations(['subAsync'])
}
如下:

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

export default {
  data() {
    return {}
  },
  methods:{
      //獲得mapMutations映射的sub函數(shù)
      ...mapMutations(['sub']),
      //當(dāng)點(diǎn)擊按鈕時(shí)觸發(fā)Sub函數(shù)
      Sub(){
          //調(diào)用sub函數(shù)完成對(duì)數(shù)據(jù)的操作
          this.sub(10);
      },
      //獲得mapActions映射的addAsync函數(shù)
      ...mapActions(['subAsync']),
      asyncSub(){
          this.subAsync(5);
      }
  },
  computed:{
      ...mapState(['count'])
      
  }
}

D.Getter

Getter用于對(duì)Store中的數(shù)據(jù)進(jìn)行加工處理形成新的數(shù)據(jù)
它只會(huì)包裝Store中保存的數(shù)據(jù),并不會(huì)修改Store中保存的數(shù)據(jù)矿酵,當(dāng)Store中的數(shù)據(jù)發(fā)生變化時(shí)唬复,Getter生成的內(nèi)容也會(huì)隨之變化
打開(kāi)store.js文件,添加getters全肮,如下:

export default new Vuex.Store({
  .......
  getters:{
    //添加了一個(gè)showNum的屬性
    showNum : state =>{
      return '最新的count值為:'+state.count;
    }
  }
})

然后打開(kāi)Addition.vue中敞咧,添加插值表達(dá)式使用getters

<h3>{{$store.getters.showNum}}</h3>

或者也可以在Addition.vue中,導(dǎo)入mapGetters辜腺,并將之映射為計(jì)算屬性

import { mapGetters } from 'vuex'
computed:{
  ...mapGetters(['showNum'])
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末休建,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子评疗,更是在濱河造成了極大的恐慌测砂,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件百匆,死亡現(xiàn)場(chǎng)離奇詭異砌些,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)加匈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門存璃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人雕拼,你說(shuō)我怎么就攤上這事纵东。” “怎么了啥寇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵偎球,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我示姿,道長(zhǎng)甜橱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任栈戳,我火速辦了婚禮,結(jié)果婚禮上难裆,老公的妹妹穿的比我還像新娘子檀。我一直安慰自己镊掖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布褂痰。 她就那樣靜靜地躺著亩进,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缩歪。 梳的紋絲不亂的頭發(fā)上归薛,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音匪蝙,去河邊找鬼主籍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛逛球,可吹牛的內(nèi)容都是我干的千元。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼颤绕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幸海!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起奥务,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤物独,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后氯葬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體挡篓,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年溢谤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞻凤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡世杀,死狀恐怖阀参,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞻坝,我是刑警寧澤蛛壳,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站所刀,受9級(jí)特大地震影響衙荐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浮创,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一忧吟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斩披,春花似錦溜族、人聲如沸讹俊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仍劈。三九已至,卻和暖如春寡壮,著一層夾襖步出監(jiān)牢的瞬間贩疙,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工况既, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留这溅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓坏挠,卻偏偏與公主長(zhǎng)得像芍躏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子降狠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 使用 在 Vue 的單頁(yè)面應(yīng)用中使用对竣,需要使用Vue.use(Vuex)調(diào)用插件。使用非常簡(jiǎn)單榜配,只需要將其注入到V...
    胡不歸vac閱讀 15,644評(píng)論 0 14
  • vuex的作用 vuex來(lái)保存我們需要管理的狀態(tài)值否纬,值一旦被修改,所有引用該值的地方就會(huì)自動(dòng)更新蛋褥,解決vue中各個(gè)...
    手指樂(lè)閱讀 216評(píng)論 0 1
  • 有的組件中獲取到 store 中的state, 需要對(duì)進(jìn)行加工才能使用临燃,computed 屬性中就需要寫操作函數(shù)...
    開(kāi)車去環(huán)游世界閱讀 4,836評(píng)論 0 2
  • 引用 在一個(gè)模塊化的打包系統(tǒng)中,您必須顯式地通過(guò) Vue.use() 來(lái)安裝 Vuex: 當(dāng)使用全局 script...
    angelwgh閱讀 167評(píng)論 0 0
  • 清清的晨風(fēng)攜著綿綿的細(xì)雨帶著我暖暖的心意正款款地向你走來(lái)烙心,請(qǐng)打開(kāi)你心靈的一扇窗膜廊,接收我略微有點(diǎn)遲到的問(wèn)候與祝福:我...
    黯黯紅塵一路相伴閱讀 176評(píng)論 0 0