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

詳解vuex中mutations方法的使用與實現(xiàn)

 更新時間:2023年11月01日 08:43:33   作者:BNTang  
這篇文章主要為大家詳細介紹了vuex中mutations方法的使用與實現(xiàn)的相關知識,文中的示例代碼簡潔易懂,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起了解一下

經(jīng)過上一篇章介紹,完成了實現(xiàn) getters 的功能,那么接下來本篇將會實現(xiàn) mutations 的功能。

在實現(xiàn)之前我們先來回顧一下 mutations 的使用。

將官方的 Vuex 導入進來,因為我們的還沒有實現(xiàn),現(xiàn)用一下官方的,來演示一下 mutations 的使用。

mutations 是用來修改共享數(shù)據(jù)的,先在 mutations 中定義一個方法,這個方法接受兩個參數(shù),第一個參數(shù)是 state,第二個參數(shù)是 payload,payload 是一個對象,這個對象中存放的是我們需要修改的數(shù)據(jù)。

addNum(state, payload) {
    state.num += payload;
},

在 state 當中定義 num:

接下來就是使用了,使用的時候需要使用 commit 方法,commit 方法接受兩個參數(shù),第一個參數(shù)是方法名,第二個參數(shù)是 payload,payload 是一個對象,這個對象中存放的是我們需要修改的數(shù)據(jù)。

隨便找一個組件,先展示我們的 num,然后在編寫一個按鈕,點擊按鈕之后調用 addNum 方法,傳入一個參數(shù) 10,這樣就可以實現(xiàn) num 的增加了。

展示 num,我這里在 HelloWorld.vue 組件中進行展示的:

<template>
  <div class="hello">
    <p>{{ this.$store.state.num }}</p>
  </div>
</template>

展示完畢之后在編寫一個按鈕,點擊按鈕之后調用 addNum 方法:

<button @click="myFn">我是按鈕</button>

在 HelloWorld.vue 組件中編寫 myFn 方法:

myFn() {
  this.$store.commit('addNum', 10);
},

好了到這里,我們的基本結構搭建完畢,運行一下,看看效果:

這個就是 mutations 的基本使用,那么了解完和回顧完畢之后,接下來我們就來實現(xiàn) mutations 的功能。

其實 mutations 的實現(xiàn)和 getters 的實現(xiàn)差不多,好,我們廢話不多說,直接來處理下吧,我先將上一篇處理 getters 的代碼封裝下,然后再來處理 mutations 的代碼。

我單獨抽取一個 initGetters 來做這個事情,這樣代碼就清晰了很多,這個 initGetters 方法接受一個 options,然后在將之前處理的代碼放進去即可。

代碼如下:

constructor(options) {
    this.state = options.state;
    // 將傳遞進來的 getters 放到 Store 上
    this.initGetters(options);
}

initGetters(options) {
    // 1.拿到傳遞進來的getters
    let getters = options.getters || {};
    // 2.在Store上新增一個getters的屬性
    this.getters = {};
    // 3.將傳遞進來的getters中的方法添加到當前Store的getters上
    for (let key in getters) {
        Object.defineProperty(this.getters, key, {
            get: () => {
                // 4.將getters中的方法執(zhí)行, 并且將state傳遞過去
                return getters[key](this.state);
            }
        })
    }
}

這樣我們的 getters 就處理完畢了,接下來我們就來處理 mutations 的代碼。

一樣的我編寫一個 initMutations 方法,這個方法接受一個 options, 這里的步驟和 getters 的步驟是一樣的,我們先來看一下代碼:

initMutations(options) {
    // 1.拿到傳遞進來的mutations
    let mutations = options.mutations || {};
    // 2.在Store上新增一個mutations的屬性
    this.mutations = {};
    // 3.將傳遞進來的mutations中的方法添加到當前Store的mutations上
    for (let key in mutations) {
        this.mutations[key] = (payload) => {
            mutations[key](this.state, payload);
        }
    }
}

這樣 Store 上面就有了一個 mutations 的屬性,這個屬性中存放的是我們傳遞進來的 mutations 方法,先來驗證一下,打開瀏覽器,看看效果:

注意點:記得將官方的 Vuex 注釋掉,用我們自己的 Nuex。

這樣我們的 mutations 就處理完畢了,接下來我們就來處理一下 commit 方法。

通過之前我們在使用 mutations 的時候,是通過 store.commit 方法來調用的,所以我們需要在 Store 上面添加一個 commit 方法,這個方法接受兩個參數(shù),第一個參數(shù)是方法名,第二個參數(shù)是 payload,payload 是一個對象,這個對象中存放的是我們需要修改的數(shù)據(jù)。

commit 方法具體的實現(xiàn)代碼邏輯就是去 mutations 中找到對應的方法,然后執(zhí)行這個方法,將 state 和 payload 傳遞過去。

代碼如下:

commit(type, payload) {
    this.mutations[type](payload);
}

實現(xiàn)了 commit 方法之后,我們就可以在組件中使用了,我們先來驗證一下,打開瀏覽器,看看效果:

我這里不截圖了,效果就是點擊了按鈕發(fā)現(xiàn) num 值并沒有發(fā)生變化,這是為什么呢?

因為我們在 mutations 中修改的是 state 當中的數(shù)據(jù),state 并沒有實現(xiàn)雙向綁定,所以不改變是正常的。

那么在 mutations 中更改了 state 的數(shù)據(jù)之后,我們怎么去更新視圖呢?這里我們只需要將 state 變成雙向綁定的即可,這里我們使用 Vue 當中的 util 工具類來進行快速實現(xiàn)雙向綁定。

正好呢通過這個問題,可以讓大家知道在 Vue 中的 util 工具類中提供了有一個方法叫做 defineReactive,這個方法可以讓我們的數(shù)據(jù)變成雙向綁定的。

通過這個方法就可以快速的將某個數(shù)據(jù)變成雙向綁定的數(shù)據(jù),defineReactive 這個方法接收三個參數(shù):

  • 第一個參數(shù): 要給哪個對象添加屬性
  • 第二個參數(shù): 要給指定的對象添加什么屬性
  • 第三個參數(shù): 要給這個屬性添加什么值

好了,廢話不多說,我們直接來處理一下吧,我們先導入 Vue,就可以通過 Vue.util.defineReactive 來調用這個方法了。

代碼如下:

Vue.util.defineReactive(this, 'state', options.state);

本章的重點就是要知道在 Vue 當中有 defineReactive 方法,這個方法可以讓我們的數(shù)據(jù)變成雙向綁定的,這樣我們就可以在 mutations 中修改 state 的數(shù)據(jù)之后,視圖也會發(fā)生變化了。

這樣我們的 state 就變成了雙向綁定的了,驗證一下,打開瀏覽器,看看效果即可,好了到這里,我們的 mutations 就處理完畢了。

以上就是詳解vuex中mutations方法的使用與實現(xiàn)的詳細內容,更多關于vuex mutations的資料請關注腳本之家其它相關文章!

相關文章

  • VUE3+Element-plus中el-form的使用示例代碼

    VUE3+Element-plus中el-form的使用示例代碼

    這篇文章主要介紹了VUE3+Element-plus中el-form的使用示例代碼,本文通過圖文示例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • vue-autoui自匹配webapi的UI控件的實現(xiàn)

    vue-autoui自匹配webapi的UI控件的實現(xiàn)

    這篇文章主要介紹了vue-autoui自匹配webapi的UI控件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • 微信內置開發(fā) iOS修改鍵盤換行為搜索的解決方案

    微信內置開發(fā) iOS修改鍵盤換行為搜索的解決方案

    今天小編就為大家分享一篇微信內置開發(fā) iOS修改鍵盤換行為搜索的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 關于應用UI組件的移動端適配方式

    關于應用UI組件的移動端適配方式

    這篇文章主要介紹了關于應用UI組件的移動端適配方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue項目中使用axios上傳圖片等文件操作

    vue項目中使用axios上傳圖片等文件操作

    axios 是一個基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端。這篇文章主要給大家介紹了vue項目中使用axios上傳圖片等文件操作,需要的朋友參考下吧
    2017-11-11
  • Vue實現(xiàn)前后端完全分離的項目實戰(zhàn)

    Vue實現(xiàn)前后端完全分離的項目實戰(zhàn)

    本文主要介紹了Vue實現(xiàn)前后端完全分離的項目實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • vue動態(tài)代理無須重啟項目解決方案詳解

    vue動態(tài)代理無須重啟項目解決方案詳解

    這篇文章主要為大家介紹了vue動態(tài)代理無須重啟項目解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Vue+webpack+Element 兼容問題總結(小結)

    Vue+webpack+Element 兼容問題總結(小結)

    這篇文章主要介紹了Vue+webpack+Element 兼容問題總結(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • vue+element-ui表格自定義列模版的實現(xiàn)

    vue+element-ui表格自定義列模版的實現(xiàn)

    本文主要介紹了vue+element-ui表格自定義列模版的實現(xiàn),通過插槽完美解決了element-ui表格自定義列模版的問題,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • 分析Vue指令實現(xiàn)原理

    分析Vue指令實現(xiàn)原理

    自定義指令是vue中使用頻率僅次于組件,其包含bind、inserted、update、componentUpdated、unbind五個生命周期鉤子。本文將對vue指令的工作原理進行相應介紹
    2021-06-06

最新評論

淮安市| 文成县| 东台市| 新乐市| 皋兰县| 汶上县| 宁河县| 郎溪县| 当雄县| 泽州县| 苍溪县| 城步| 秦皇岛市| 明星| 桐柏县| 华坪县| 瓦房店市| 临湘市| 临邑县| 漯河市| 驻马店市| 大渡口区| 英吉沙县| 崇明县| 阿拉善左旗| 贵州省| 辰溪县| 修武县| 桐庐县| 晋江市| 且末县| 乌鲁木齐县| 开鲁县| 苏尼特右旗| 阿图什市| 永昌县| 德州市| 时尚| 石泉县| 曲水县| 永康市|