溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vuex的作用是什么

發(fā)布時(shí)間:2021-01-19 11:26:20 來源:億速云 閱讀:751 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)vuex的作用是什么,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

vuex是基于vue框架的一個(gè)狀態(tài)管理庫,可以管理復(fù)雜應(yīng)用的數(shù)據(jù)狀態(tài),可以方便的實(shí)現(xiàn)組件之間的數(shù)據(jù)共享,例兄弟組件的通信、多層嵌套的組件的傳值等等;它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。

Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式,是基于vue框架的一個(gè)狀態(tài)管理庫??梢怨芾韽?fù)雜應(yīng)用的數(shù)據(jù)狀態(tài),可以方便的實(shí)現(xiàn)組件之間的數(shù)據(jù)共享,比如兄弟組件的通信、多層嵌套的組件的傳值等等。

Vuex采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。

Vuex 也集成到 Vue 的官方調(diào)試工具 devtools extension,提供了諸如零配置的 time-travel 調(diào)試、狀態(tài)快照導(dǎo)入導(dǎo)出等高級(jí)調(diào)試功能。

Vuex中的核心特性

(1)State: 提供唯一的公共數(shù)據(jù)源,所有共享的數(shù)據(jù)都要統(tǒng)一放到Store中的State中存儲(chǔ)

在組件中訪問State的方式:

A.this.$store.state.全局?jǐn)?shù)據(jù)名稱 如:this.$store.state.count

B.先按需導(dǎo)入mapState函數(shù): import { mapState } from ‘vuex’

然后數(shù)據(jù)映射為計(jì)算屬性: computed:{ …mapState([‘全局?jǐn)?shù)據(jù)名稱’]) }

(2) Mutation:用于修改變更$store中的數(shù)

使用方式:

打開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([‘a(chǎn)dd’])}

如下:

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'])
      
  }
}

(3)Action:在mutations中不能編寫異步的代碼,會(huì)導(dǎo)致vue調(diào)試器的顯示出錯(cuò)。在vuex中我們可以使用Action來執(zhí)行異步操作。
操作步驟如下:

打開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)
  }
}

(4)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ì)隨之變化。
打開store.js文件,添加getters,如下:

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

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

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

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

import { mapGetters } from 'vuex'
computed:{
  ...mapGetters(['showNum'])
}

關(guān)于“vuex的作用是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI