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

Vuex中的Mutation使用詳解

 更新時間:2023年11月13日 10:56:33   作者:mumuwei_l  
這篇文章主要介紹了Vuex中的Mutation使用詳解,當(dāng)我們想修改狀態(tài)值,想傳入的值進而進行修改時,你可以向 store.commit 傳入額外的參數(shù),即 mutation 的 載荷,需要的朋友可以參考下

一、Mutation的作用

更改 Vuex 的store 中的狀態(tài)的唯一方法是提交 mutation。 Vuex 中的 mutation 非常類似于事件:

  • 每個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調(diào)函數(shù) (handler)。
  • 這個回調(diào)函數(shù)就是我們實際進行狀態(tài)更改的函數(shù),并且它會接受 state 作為第一個參數(shù):
const store = new Vuex.Store({
  state: {
    count: 1
  },
  mutations: {
  	// 第一個參數(shù)為 state
    add(state) {
      // 變更狀態(tài),即變更值
      state.count++
    }
  }
})
  • 你不能直接調(diào)用一個 mutation handler。

這個選項更像是事件注冊:

“當(dāng)觸發(fā)一個類型為 add 的 mutation 時,調(diào)用此函數(shù)。”要喚醒一個 mutation handler,你需要以相應(yīng)的 type 調(diào)用 store.commit 方法:

store.commit('increment')

二、提交載荷(Payload)

即當(dāng)我們想修改狀態(tài)值,想傳入的值進而進行修改時,你可以向 store.commit 傳入額外的參數(shù),即 mutation 的 載荷(payload):

// 定義
mutations: {
  // n被稱為載荷, 即為我們傳入的值
  add(state, n) {
    state.count += n
  }
}
// 調(diào)用
store.commit('increment', 10)

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

// 定義
mutations: {
  add(state, payload) {
    state.count += payload.amount
  }
}
// 調(diào)用
store.commit('increment', {
  amount: 10
})

三、對象風(fēng)格的提交方式

提交 mutation 的另一種方式是直接使用包含 type 屬性的對象:

store.commit({
  type: 'increment',
  amount: 10
})

當(dāng)使用對象風(fēng)格的提交方式,整個對象都作為載荷傳給 mutation 函數(shù),因此 handler 保持不變:

mutations: {
  add(state, payload) {
    state.count += payload.amount
  }
}

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

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

若需要在對象上添加新屬性時,你應(yīng)該:

  1. 使用 Vue.set(obj, 'newProp', 123)
  2. 以新對象替換老對象。例如,利用對象展開運算符我們可以這樣寫:
state.obj = { ...state.obj, newProp: 123 }

五、Mutation 必須是同步函數(shù) ?。?!

一條重要的原則就是要記住 mutation 必須是同步函數(shù)。為什么?請參考下面的例子:

mutations: {
  someMutation (state) {
     // 一秒后count++
    setTimeout(() => {
      state.count++
    }, 1000)
  }
}

現(xiàn)在想象,我們正在 debug 一個 app 并且觀察 devtool 中的 mutation 日志。每一條mutation 被記錄,devtools 都需要捕捉到前一狀態(tài)和后一狀態(tài)的快照。然而,在上面的例子中 mutation 中的異步函數(shù)中的回調(diào)讓這不可能完成:因為當(dāng) mutation 觸發(fā)的時候,回調(diào)函數(shù)還沒有被調(diào)用,devtools 不知道什么時候回調(diào)函數(shù)實際上被調(diào)用——實質(zhì)上任何在回調(diào)函數(shù)中進行的狀態(tài)的改變都是不可追蹤的。 即雖然1秒后我們可以實現(xiàn) state.count++ ,但是 devtools 是無法監(jiān)測state.count 的改變的。 假設(shè)調(diào)用通過 someMutation count 的值為0, 打開 devtools工具,然后我們調(diào)用 someMutation ,觀察 devtools 的記錄,我肯可以看到 devtools 監(jiān)聽到的 count 的值還是為0, 因為時異步函數(shù),所以 someMutation 的 state.count++ 操作還沒有執(zhí)行。 大家可以嘗試在自己的瀏覽器使用 devtools 工具試試看。

六、在組件中提交 Mutation

你可以在組件中使用 this.$store.commit('xxx') 提交 mutation,或者使用 mapMutations 輔助函數(shù)將組件中的 methods 映射為 store.commit 調(diào)用(需要在根節(jié)點注入 store)。

// main.js
// 根節(jié)點引入store
new Vue({
  el: '#app',
  store
})
// 組件
// 引入輔助函數(shù) mapMutations 
import { mapMutations } from 'vuex'
export default {
  methods: {
    // 將 `this.add()` 映射為 `this.$store.commit('add')`
    // `mapMutations` 也支持載荷:
    // 將 `this.addBy(amount)` 映射為 this.$store.commit('addBy', amount)`
    ...mapMutations(['add', 'addBy']),
    // 將 `this.increment()` 映射為 `this.$store.commit('add')`
    ...mapMutations({
      increment: 'add' 
    })
  }
}

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

相關(guān)文章

  • vue如何給頁面增加url前綴

    vue如何給頁面增加url前綴

    這篇文章主要介紹了vue如何給頁面增加url前綴問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vue2使用el-date-picker實現(xiàn)動態(tài)日期范圍demo

    vue2使用el-date-picker實現(xiàn)動態(tài)日期范圍demo

    這篇文章主要為大家介紹了vue2使用el-date-picker實現(xiàn)動態(tài)日期范圍示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • fetch網(wǎng)絡(luò)請求封裝示例詳解

    fetch網(wǎng)絡(luò)請求封裝示例詳解

    這篇文章主要介紹了fetch網(wǎng)絡(luò)請求封裝的示例內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • vue項目打包并部署到Linux服務(wù)器的詳細(xì)過程

    vue項目打包并部署到Linux服務(wù)器的詳細(xì)過程

    我們在會開發(fā)項目的同時,也應(yīng)該了解一下項目是如何部署到服務(wù)器的,下面這篇文章主要給大家介紹了關(guān)于vue項目打包并部署到Linux服務(wù)器的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Vue之定義全局工具類問題

    Vue之定義全局工具類問題

    這篇文章主要介紹了Vue之定義全局工具類問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue+element 模態(tài)框表格形式的可編輯表單實現(xiàn)

    vue+element 模態(tài)框表格形式的可編輯表單實現(xiàn)

    這篇文章主要介紹了vue+element 模態(tài)框表格形式的可編輯表單實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • vue+iview 兼容IE11瀏覽器的實現(xiàn)方法

    vue+iview 兼容IE11瀏覽器的實現(xiàn)方法

    這篇文章主要介紹了vue+iview 兼容IE11瀏覽器的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • vue開發(fā)拖拽進度條滑動組件

    vue開發(fā)拖拽進度條滑動組件

    這篇文章主要為大家詳細(xì)介紹了vue開發(fā)拖拽進度條滑動組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Vue一個案例引發(fā)的遞歸組件的使用詳解

    Vue一個案例引發(fā)的遞歸組件的使用詳解

    這篇文章主要介紹了Vue一個案例引發(fā)的遞歸組件的使用,本文主要給大家展示如何在項目中使用遞歸組件,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • vue實現(xiàn)全匹配搜索列表內(nèi)容

    vue實現(xiàn)全匹配搜索列表內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)全匹配搜索列表內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論