最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vuex中的Mutations的具體使用方法

 更新時(shí)間:2020年06月01日 14:43:28   作者:知否  
這篇文章主要介紹了Vuex中的Mutations的具體使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在 Vuex 中 store 數(shù)據(jù)改變的唯一方法就是提交 mutations。mutations里面裝著一些改變數(shù)據(jù)方法的集合,這是Vuex 設(shè)計(jì)很重要的一點(diǎn),就是把處理數(shù)據(jù)邏輯方法全部放在 mutations 里面,使得數(shù)據(jù)和視圖分離。

Mutations使用

Vuex 中的 mutations 非常類似于事件,每個(gè) mutations 都有一個(gè)字符串的事件類型(type)和一個(gè)回調(diào)函數(shù)(handler),也可以理解為{type:handler()},這和訂閱發(fā)布有點(diǎn)類似。先注冊(cè)事件,當(dāng)觸發(fā)響應(yīng)類型的時(shí)候調(diào)用handker(),調(diào)用type的時(shí)候需要用到store.commit方法。

示例:

這個(gè)回調(diào)函數(shù)會(huì)接受state 作為第一個(gè)參數(shù):

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

我們不能直接使用store.mutations.increment() 來(lái)調(diào)用,Vuex 規(guī)定必須使用 store.commit 來(lái)觸發(fā)對(duì)應(yīng) type 的方法:

store.commit('increment')

提交載荷(Payload)

載荷簡(jiǎn)單的理解就是往 handler(state) 中傳參 handler(state, pryload) 。

示例:

大多數(shù)情況下,載荷是一個(gè)對(duì)象:

mutations: {
 // 提交荷載
 increment (state, payload) {
  state.count += payload.amount
 }
}

提交荷載有兩種方式:

// 把載荷和type分開(kāi)提交
store.commit('increment', {
 amount: 10
})

// 整個(gè)對(duì)象都作為載荷傳給mutation函數(shù)
store.commit({
 type: 'increment',
 amount: 10
})

我們可以根據(jù)自己的喜好來(lái)選擇使用哪種提交方式。

commit

我們可以在組件中使用 this.$store.commit('xxx') 提交 mutations。

示例:
或者可以使用 mapMutations 輔助函數(shù)將組件中的 methods 映射為 store.commit 調(diào)用(需要在根節(jié)點(diǎn)注入 store)。

示例:

在使用mapMutations 輔助函數(shù)之前同樣需要先引入:

<script>
import { mapMutations } from 'vuex'
export default {
  computed:{
    count(){
      return this.$store.state.count
    }
  },
  methods:{
    ...mapMutations([
      'increment',
      'decrement'
    ])
  }
}
</script>

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

Vuex 的 store 中的狀態(tài)是響應(yīng)式的,所以當(dāng)我們變更狀態(tài)時(shí),監(jiān)視狀態(tài)的 Vue 組件也會(huì)自動(dòng)更新。

這也意味著 Vuex 中的 mutations 也需要與使用 Vue 一樣遵守一些注意事項(xiàng),如下所示:

  • 最好提前在 store 中初始化好所有所需屬性。
  • 當(dāng)需要在對(duì)象上添加新屬性時(shí),應(yīng)該使用 Vue.set(obj, 'newProp', 123),或者以新對(duì)象替換老對(duì)象。例如利用對(duì)象展開(kāi)運(yùn)算符可以寫(xiě)成:state.obj = {...state.obj, newProp: 123 }。

使用常量替代 Mutations 事件類型

使用常量替代 mutations 事件類型在各種 Flux 實(shí)現(xiàn)中是很常見(jiàn)的模式。這樣可以使 linter 之類的工具發(fā)揮作用,同時(shí)把這些常量放在單獨(dú)的文件中可以讓你的代碼合作者對(duì)整個(gè) app 包含的 mutations 一目了然:

// mutation-types.js
export const SOME_MUTATION = 'SOME_MUTATION'

store.js 文件內(nèi)容如下所示:

// store.js
import Vuex from 'vuex'
import { SOME_MUTATION } from './mutation-types'

const store = new Vuex.Store({
 state: { ... },
 mutations: {
  // 使用 ES2015 風(fēng)格的計(jì)算屬性命名功能來(lái)使用一個(gè)常量作為函數(shù)名
  [SOME_MUTATION] (state) {
   // mutate state
  }
 }
})

我們知道m(xù)utation 是通過(guò)store.commit('increment')的方式調(diào)用的,其中increment方法是以字符串的形式代入。如果項(xiàng)目小,一個(gè)人開(kāi)發(fā)的話倒還好,但是項(xiàng)目大了,編寫(xiě)代碼的人多了,那就麻煩了,因?yàn)樾枰?commit 的方法一多,就會(huì)顯得特別混亂,而且以字符串形式代入的話,一旦出了錯(cuò),很難排查。

所以,在需要多人協(xié)作的大型項(xiàng)目中,最好還是用常量的形式來(lái)處理 mutation。

必須是同步函數(shù)

我們要記住的是,Mutation 必須是同步函數(shù)。

因?yàn)槲覀冎砸ㄟ^(guò)提交 mutation 的方式來(lái)改變狀態(tài)數(shù)據(jù),是因?yàn)槲覀兿胍鞔_地追蹤到狀態(tài)的變化。如果是類似下面這樣異步的話:

mutations: {
 someMutation (state) {
  api.callAsyncMethod(() => {
   state.count++
  })
 }
}

我們就不知道什么時(shí)候狀態(tài)會(huì)發(fā)生改變,所以也就無(wú)法追蹤了,這與 Mutation 的設(shè)計(jì)初心相悖,所以強(qiáng)制規(guī)定它必須是同步函數(shù)。

store.commit('increment') // 任何由'increment'導(dǎo)致的狀態(tài)變更都應(yīng)該在此刻完成

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

相關(guān)文章

  • Vue中的父子組件傳值及傳方法

    Vue中的父子組件傳值及傳方法

    這篇文章主要介紹了Vue中的父子組件傳值及傳方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Vue項(xiàng)目設(shè)置多個(gè)靜態(tài)文件及自定義靜態(tài)文件目錄的方案詳解

    Vue項(xiàng)目設(shè)置多個(gè)靜態(tài)文件及自定義靜態(tài)文件目錄的方案詳解

    本文介紹了如何在Vue項(xiàng)目中配置多個(gè)靜態(tài)文件目錄,并提供了使用Vite和Webpack實(shí)現(xiàn)的示例,通過(guò)在vite.config.ts或vue.config.js中引入相關(guān)插件和配置,可以輕松實(shí)現(xiàn)自定義靜態(tài)文件目錄,希望這些內(nèi)容對(duì)您有所幫助,感興趣的朋友一起看看吧
    2025-01-01
  • vue實(shí)現(xiàn)動(dòng)態(tài)面包屑導(dǎo)航

    vue實(shí)現(xiàn)動(dòng)態(tài)面包屑導(dǎo)航

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)動(dòng)態(tài)面包屑導(dǎo)航的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue.js使用計(jì)算屬性緩存結(jié)果的方法

    Vue.js使用計(jì)算屬性緩存結(jié)果的方法

    在Vue.js中,計(jì)算屬性(computed properties)是組件的重要組成部分,它們根據(jù)組件的數(shù)據(jù)自動(dòng)計(jì)算新的值,并在數(shù)據(jù)變化時(shí)自動(dòng)更新,本文將探討計(jì)算屬性的緩存機(jī)制,并通過(guò)有趣的示例展示如何利用計(jì)算屬性緩存結(jié)果,提升應(yīng)用性能,需要的朋友可以參考下
    2025-03-03
  • vue.js實(shí)現(xiàn)備忘錄功能的方法

    vue.js實(shí)現(xiàn)備忘錄功能的方法

    下面小編就為大家?guī)?lái)一篇vue.js實(shí)現(xiàn)備忘錄功能的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • 淺談Vue使用Cascader級(jí)聯(lián)選擇器數(shù)據(jù)回顯中的坑

    淺談Vue使用Cascader級(jí)聯(lián)選擇器數(shù)據(jù)回顯中的坑

    這篇文章主要介紹了淺談Vue使用Cascader級(jí)聯(lián)選擇器數(shù)據(jù)回顯中的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • elementUI Tree 樹(shù)形控件單選實(shí)現(xiàn)示例

    elementUI Tree 樹(shù)形控件單選實(shí)現(xiàn)示例

    在ElementUI中樹(shù)形控件本身不支持單選功能,本文就來(lái)介紹一下如何實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Vue自定義組件雙向綁定實(shí)現(xiàn)原理及方法詳解

    Vue自定義組件雙向綁定實(shí)現(xiàn)原理及方法詳解

    這篇文章主要介紹了Vue自定義組件雙向綁定實(shí)現(xiàn)原理及方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 大前端代碼重構(gòu)之事件攔截iOS?Flutter?Vue示例分析

    大前端代碼重構(gòu)之事件攔截iOS?Flutter?Vue示例分析

    這篇文章主要為大家介紹了大前端代碼重構(gòu)之事件攔截iOS?Flutter?Vue示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • vue 中filter的多種用法

    vue 中filter的多種用法

    這篇文章主要介紹了vue 中filter的多種用法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2018-04-04

最新評(píng)論

白城市| 凤阳县| 灌南县| 平利县| 吉林省| 海兴县| 芜湖县| 抚顺市| 宣武区| 平谷区| 西昌市| 襄城县| 鹤岗市| 潞城市| 凯里市| 灵宝市| 奉贤区| 报价| 弥渡县| 宁陵县| 兴安盟| 苗栗市| 桃园市| 南召县| 临潭县| 新乡县| 黔南| 盐边县| 抚顺县| 芷江| 龙川县| 交城县| 澳门| 五莲县| 佳木斯市| 抚松县| 思南县| 扎赉特旗| 确山县| 岐山县| 门头沟区|