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

VUEX?使用?mutations的兩種方式

 更新時間:2023年01月17日 08:33:56   作者:香吧香  
這篇文章主要介紹了VUEX?使用?mutations的兩種方式,實現(xiàn)方式就是利用vuex中的mutations,在mutations中定義一個方法,這個方法就是把點擊的index(也就是每個列表的唯一標識),傳給state中的當前標識,需要的朋友可以參考下

VUEX 使用 mutations

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

  通過這種方式雖然操作起來稍微繁瑣一些,但是可以集中監(jiān)控所有數(shù)據(jù)的變化

  示例:

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

第一種使用方式:

  this.$store.commit() 是觸發(fā)mutations的第一種方式,

  示例:

// 方法
mutations:{
  // 加的方法
  increment(state,addcounter){
    state.counter += addcounter
  },
  // 減的方法
  decrement(state,subcounter){
    state.counter -= subcounter
  }
},

  使用:

<template>
  <div>
    <h2>Vuex第四個頁面</h2>
    <button @click="addnum(5)">+</button>
    <button @click="subnum(5)">-</button>
    <p>{{$store.state.counter}}</p>
  </div>
</template>

<script>
  export default {
    name: "Vuexfour",
    methods:{
      addnum(addcounter){
        this.$store.commit("increment",addcounter)
      },
      subnum(subcounter){
        this.$store.commit("decrement",subcounter)
      }
    }
  }
</script>

第二種方式 mapMutations

  通過以函數(shù)映射的方式

    1.從vuex中按需求導入mapMutations 函數(shù)

import {mapMutations} from 'vuex'

    通過剛才導入的mapMutations函數(shù),將當前組件需要的全局數(shù)據(jù),映射為當前組件的computed計算屬性

    2. 將指定的mutations函數(shù),映射為當前組件的methods函數(shù)

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

    示例:

<script>
import { mapMutations } from 'vuex'
export default {
  computed:{
    count(){
      return this.$store.state.count
    }
  },
  methods:{
    ...mapMutations([//采用解構的方式引入
      'increment',
      'decrement'
    ])
  }
}
</script>

PS:Vuex中mutations的用法

Vuex中mutations的用法

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

Mutations使用

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

示例:
這個回調(diào)函數(shù)會接受state 作為第一個參數(shù):

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

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

store.commit('increment')

提交載荷(Payload)

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

示例:
大多數(shù)情況下,載荷是一個對象:

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

提交荷載有兩種方式:

// 把載荷和type分開提交
store.commit('increment', {
 amount: 10
})
 
// 整個對象都作為載荷傳給mutation函數(shù)
store.commit({
 type: 'increment',
 amount: 10
})

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

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

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

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

<script>
import { mapMutations } from 'vuex'
export default {
  computed:{
    count(){
      return this.$store.state.count
    }
  },
  methods:{
    ...mapMutations([//采用解構的方式引入
      'increment',
      'decrement'
    ])
  }
}
</script>

Mutations 需遵守 Vue 的響應規(guī)則
Vuex 的 store 中的狀態(tài)是響應式的,所以當我們變更狀態(tài)時,監(jiān)視狀態(tài)的 Vue 組件也會自動更新。

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

最好提前在 store 中初始化好所有所需屬性。
當需要在對象上添加新屬性時,應該使用 Vue.set(obj, ‘newProp’, 123),或者以新對象替換老對象。例如利用對象展開運算符可以寫成:state.obj = {…state.obj, newProp: 123 }。
使用常量替代 Mutations 事件類型
使用常量替代 mutations 事件類型在各種 Flux 實現(xiàn)中是很常見的模式。這樣可以使 linter 之類的工具發(fā)揮作用,同時把這些常量放在單獨的文件中可以讓你的代碼合作者對整個 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 風格的計算屬性命名功能來使用一個常量作為函數(shù)名
  [SOME_MUTATION] (state) {
   // mutate state
  }
 }
})

我們知道m(xù)utation 是通過store.commit(‘increment’)的方式調(diào)用的,其中increment方法是以字符串的形式代入。如果項目小,一個人開發(fā)的話倒還好,但是項目大了,編寫代碼的人多了,那就麻煩了,因為需要 commit 的方法一多,就會顯得特別混亂,而且以字符串形式代入的話,一旦出了錯,很難排查。

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

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

因為我們之所以要通過提交 mutation 的方式來改變狀態(tài)數(shù)據(jù),是因為我們想要更明確地追蹤到狀態(tài)的變化。如果是類似下面這樣異步的話:

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

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

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

需求:點擊不同的音樂列表就讓下方播放列表顯示自己點擊的列表,音樂列表是循環(huán)的

實現(xiàn)方式:就是利用vuex中的mutations。在mutations中定義一個方法,這個方法就是把點擊的index(也就是每個列表的唯一標識),傳給state中的當前標識。在循環(huán)列表的頁面,把setPlayIndex方法引用過來用到頁面中,點擊不同的列表傳不同的index也就是setPlayIndex方法中的不同的value。

到此這篇關于VUEX 使用 mutations的兩種方式的文章就介紹到這了,更多相關VUEX 使用 mutations內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue3 Element Plus el-form表單組件示例詳解

    Vue3 Element Plus el-form表單組件示例詳解

    這篇文章主要介紹了Vue3 Element Plus el-form表單組件,Element Plus 是 ElementUI 的升級版,提供了更多的表單控件和功能,同時還改進了一些細節(jié)和樣式,本文結合示例代碼給大家詳細講解,需要的朋友可以參考下
    2023-04-04
  • vue+elementUi實現(xiàn)點擊地圖自動填充經(jīng)緯度以及地點

    vue+elementUi實現(xiàn)點擊地圖自動填充經(jīng)緯度以及地點

    這篇文章主要為大家詳細介紹了vue+elementUi實現(xiàn)點擊地圖自動填充經(jīng)緯度以及地點,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JS框架之vue.js(深入三:組件1)

    JS框架之vue.js(深入三:組件1)

    這篇文章主要介紹了JS框架之vue.js component組件的相關資料,本文通過實例詳解的方式給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • vue 點擊按鈕增加一行的方法

    vue 點擊按鈕增加一行的方法

    今天小編就為大家分享一篇vue 點擊按鈕增加一行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue3初探之ref、reactive以及改變數(shù)組的值

    Vue3初探之ref、reactive以及改變數(shù)組的值

    在setup函數(shù)中,可以使用ref函數(shù)和reactive函數(shù)來創(chuàng)建響應式數(shù)據(jù),下面這篇文章主要給大家介紹了關于Vue3初探之ref、reactive以及改變數(shù)組值的相關資料,需要的朋友可以參考下
    2022-09-09
  • 如何解決vue項目打包后文件過大問題

    如何解決vue項目打包后文件過大問題

    這篇文章主要介紹了如何解決vue項目打包后文件過大問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 前端框架Vue.js構建大型應用淺析

    前端框架Vue.js構建大型應用淺析

    這篇文章主要為大家詳細介紹了前端框架Vue.js構建大型應用的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • vue實現(xiàn)token過期自動跳轉到登錄頁面

    vue實現(xiàn)token過期自動跳轉到登錄頁面

    本文主要介紹了vue實現(xiàn)token過期自動跳轉到登錄頁面,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vue項目中添加electron的詳細代碼

    vue項目中添加electron的詳細代碼

    這篇文章通過實例代碼給大家介紹了vue項目中添加electron的方法,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11
  • Vue3 Pinia如何修改全局狀態(tài)變量值

    Vue3 Pinia如何修改全局狀態(tài)變量值

    這篇文章主要介紹了Vue3 Pinia如何修改全局狀態(tài)變量值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

营山县| 华安县| 兴隆县| 灵山县| 吉木萨尔县| 黔南| 清涧县| 雷山县| 邛崃市| 乐昌市| 九江县| 河东区| 新巴尔虎左旗| 阿鲁科尔沁旗| 康保县| 邯郸市| 新河县| 济南市| 米林县| 尚义县| 读书| 临猗县| 吉木萨尔县| 盐亭县| 古浪县| 慈溪市| 板桥市| 娄烦县| 广州市| 米脂县| 荔浦县| 吉首市| 城口县| 沂南县| 建始县| 耒阳市| 乐至县| 枞阳县| 石狮市| 辽源市| 贡嘎县|