欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Vuex的屬性

 更新時(shí)間:2022年08月06日 08:45:26   作者:shallow-dreamer  
Vuex是專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式,這篇文章主要介紹了Vuex的屬性,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Vuex是專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。

簡單來說:VuexVue框架中狀態(tài)管理

圖中綠色虛線包裹起來的部分就是Vue的核心,state中保存的就是公共狀態(tài),改變state的唯一方式就是通過mutations進(jìn)行更改

狀態(tài)管理模式

把組件的共享狀態(tài)抽取出來,以一個(gè)全局單例模式管理。在這種模式下,組件數(shù)構(gòu)成了一個(gè)巨大的視圖,不管在樹的哪個(gè)位置,任何組件都能獲取狀態(tài)或者觸發(fā)行為,這就是狀態(tài)管理模式。

應(yīng)用場景有:單頁應(yīng)用中,組件之間的數(shù)據(jù)狀態(tài)

應(yīng)用實(shí)例:

  • 購物車功能
  • 下單頁面選擇優(yōu)惠券按鈕,點(diǎn)擊進(jìn)入優(yōu)惠券頁面,選擇后返回到下單頁,數(shù)據(jù)會綁定回來,顯示已選擇的優(yōu)惠券
  • 登錄狀態(tài)等

Vuex的屬性

  • state

    • Vuex就是一個(gè)倉庫,倉庫里面放了很多對象,其中state就是數(shù)據(jù)源存放地,對應(yīng)一般Vue對象里面的data
    • state里面存放的數(shù)據(jù)是響應(yīng)式的,Vue組件從store中讀取數(shù)據(jù),若是store中的數(shù)據(jù)發(fā)生改變,依賴這個(gè)數(shù)據(jù)的組件也會發(fā)生更新
    • 通過mapState把全局的stategetters映射到當(dāng)前組件的computed計(jì)算屬性中
  • getters

    • getters可以對state進(jìn)行計(jì)算操作,它就是store的計(jì)算屬性
    • 雖然在組件內(nèi)也可以做計(jì)算屬性,但是getters可以在多組件之間復(fù)用
    • 如果一個(gè)狀態(tài)只在一個(gè)組件內(nèi)使用,可以不用getters

Mutations

每個(gè)mutations都有一個(gè)字符串的事件類型(type)和一個(gè)回調(diào)函數(shù)(handler),這個(gè)回調(diào)函數(shù)就是實(shí)際進(jìn)行狀態(tài)修改的地方,并且它會接收state作為第一個(gè)參數(shù):

const store = new Vuex.Store({
    state:{
        count:1
    },
    mutations:{
        increment(state){
            //變更狀態(tài)
            state.count++
        }
    }
})

不能直接調(diào)用一個(gè)mutation handler。這個(gè)選項(xiàng)更像是事件注冊,當(dāng)觸發(fā)一個(gè)類型為incrementmutations時(shí),調(diào)用此函數(shù)。要喚醒一個(gè)mutation handler,需要調(diào)用相應(yīng)的type調(diào)用store.commit方法

store.commit('increment')

提交載荷(payload)

可以向store.commit傳入額外的參數(shù),即mutation的載荷(payload)

state:{
    count:0
},
mutations:{
    increment(state,n){
        state.count += n
    }
}

//組件
store.commit('increment',10)

在大多數(shù)情況下,載荷應(yīng)該是一個(gè)對象,這安樣可以包含多個(gè)字段并且記錄的mutation會更易讀

state:{
    count:0
},
mutations:{
    increment(state,payload){
        state.count += payload
    }
}

//組件
store.commit('increment',{
    amount:10
})

Mutation需遵守Vue的響應(yīng)規(guī)則

既然Vuex的store中的狀態(tài)時(shí)響應(yīng)式的,那么當(dāng)我們變更狀態(tài)時(shí),監(jiān)聽狀態(tài)的Vue組件也會自動(dòng)更新。這也意味著Vuex中的mutation需要與使用Vue一樣遵守一些注意事項(xiàng):

最好提前在store中初始化好所有所需屬性

當(dāng)需要在對象上添加新屬性時(shí),應(yīng)該

mutation必須是同步函數(shù)

使用Vue.set(obj,'newProp,123)

以新對象替換老對象。例如,利用對象展開運(yùn)算符

state.obj = {...state.obj,newProp:123}

actions

action類似于mutation,不同在于:

action通過store.dispatch方法觸發(fā)

store.dispatch('increment')

action內(nèi)部執(zhí)行異步操作

actions:{
    incrementAsync({commit}){
        setTimeout(() => {
            commit('increment')
        },1000)
    }
}

action同樣支持載荷方式和對象方式進(jìn)行分發(fā)

//以載荷形式分發(fā)
store.dispatch('incrementAsync',{
    amount:10
})
//以對象形式分發(fā)
store.dispatch({
    type:'incrementAsync',
    amount:10
})
  • action提交的是mutation,而不是直接變更狀態(tài)
  • action可以包含任意異步操作

module

module可以讓每個(gè)模塊擁有自己的state、mutations、action、getters使得結(jié)構(gòu)非常清晰,方便管理

const moduleA = {
  state: { ... },
  mutations: { ... },
  actions: { ... },
  getters: { ... }
}
const moduleB = {
  state: { ... },
  mutations: { ... },
  actions: { ... }
}

const store = new Vuex.Store({
 modules: {
  a: moduleA,
  b: moduleB
})

使用Vuex的好處

  • 多層嵌套的組件,兄弟組件間的狀態(tài)會更好管理維護(hù)
  • 緩存一些當(dāng)前要使用的請求遠(yuǎn)程或本地的數(shù)據(jù)集(刷新后會自動(dòng)銷毀)
  • 有了第二條就可以減少向服務(wù)器的請求,節(jié)省資源
  • 對于開發(fā)者來說,如果項(xiàng)目足夠復(fù)雜,團(tuán)隊(duì)規(guī)模大,數(shù)據(jù)集中處理更利于程序的穩(wěn)定和維護(hù)

參考文獻(xiàn):

https://v3.vuex.vuejs.org/zh/

到此這篇關(guān)于Vuex的屬性的文章就介紹到這了,更多相關(guān)Vuex的屬性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Vuex管理登錄狀態(tài)

    詳解Vuex管理登錄狀態(tài)

    這篇文章主要介紹了詳解Vuex管理登錄狀態(tài),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • 淺談vue的踩坑路

    淺談vue的踩坑路

    下面小編就為大家?guī)硪黄獪\談vue的踩坑路。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Vue的Options用法說明

    Vue的Options用法說明

    這篇文章主要介紹了Vue的Options用法說明,具有很好的參考價(jià)值,希望對大家有所
    2020-08-08
  • vue3.x中useRouter()執(zhí)行后返回值是undefined問題解決

    vue3.x中useRouter()執(zhí)行后返回值是undefined問題解決

    這篇文章主要給大家介紹了關(guān)于vue3.x中useRouter()執(zhí)行后返回值是undefined問題的解決方法,文中通過代碼示例介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue3.x具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Vue實(shí)現(xiàn)文件切片上傳功能的示例代碼

    Vue實(shí)現(xiàn)文件切片上傳功能的示例代碼

    在實(shí)際開發(fā)項(xiàng)目過程中有時(shí)候需要上傳比較大的文件,然后呢,上傳的時(shí)候相對來說就會慢一些,so,后臺可能會要求前端進(jìn)行文件切片上傳。本文介紹了Vue實(shí)現(xiàn)文件切片上傳的示例代碼,需要的可以參考一下
    2022-10-10
  • QT和vue交互的實(shí)現(xiàn)示例

    QT和vue交互的實(shí)現(xiàn)示例

    本文主要介紹了QT和vue交互的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Element Badge標(biāo)記的使用方法

    Element Badge標(biāo)記的使用方法

    這篇文章主要介紹了Element Badge標(biāo)記的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • vue3安裝vant實(shí)現(xiàn)按需引入和全局引入

    vue3安裝vant實(shí)現(xiàn)按需引入和全局引入

    本文主要介紹了vue3安裝vant實(shí)現(xiàn)按需引入和全局引入,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 詳解vue-router的導(dǎo)航鉤子(導(dǎo)航守衛(wèi))

    詳解vue-router的導(dǎo)航鉤子(導(dǎo)航守衛(wèi))

    這篇文章主要介紹了詳解vue-router的導(dǎo)航鉤子(導(dǎo)航守衛(wèi)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Vue?運(yùn)行高德地圖官方樣例,設(shè)置class無效的解決

    Vue?運(yùn)行高德地圖官方樣例,設(shè)置class無效的解決

    這篇文章主要介紹了Vue?運(yùn)行高德地圖官方樣例,設(shè)置class無效的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論