【Vue】vuex的getters mapState mapGetters mapMutations mapActions的使用

目錄

一、getters?

二、 mapState

三、 mapGetters

四、 mapMutations

五、 mapActions

學到這兒來個小總結:四個map方法的使用

總結不易~ 本章節對我有很大的收獲, 希望對你也是!!!


?本節素材已上傳至Gitee:yihaohhh/我愛Vue - Gitee.comhttps://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/25_src_%E6%B1%82%E5%92%8C%E6%A1%88%E4%BE%8B_getters

通過前面介紹的vuex功能還是十分強大,但是對于模板中有很多不同需求的話,我們就不要自己來寫js表達式了,當功能過于復雜,我們就要封裝一個容器來進行存儲這個功能

就比如模板要將當前求和放大10倍

    <h1>當前求和為:{{ $store.state.sum }}</h1><h3>放大10倍的和:{{ $store.state.sum * 10 }}</h3>

這里功能開始變得復雜,那么就可以考慮是不是可以封裝到計算屬性里面呢?computed

  <h3>放大10倍的和:{{ dahe()}}</h3>computed: {dahe() {return this.$store.state.sum * 10}},

但是這里就有一個問題,這個方法就只能自己組件里面使用,不能讓組件之間進行共享,所以這里就引入了新的vuex配置項,getters?

一、getters?

// 準備getters——用于將state里面的數據進行加工
const getters = {bigSum(state) {return state.sum * 10}
}// 創建 并 暴露store
export default new Vuex.Store({actions,mutations,state,getters
})

在vuex里面進行創建getters,然后實現你要完成的方法,并且將getters引入store中

那么怎么引入getters的數據到模板中呢?

我將sum修改成1好進行觀察

// 準備state——用于存儲數據
const state = {sum: 1
}

利用生命周期掛載輸出MyCount里面的$store

能夠看到我們實現的bigSum函數值為10,那么獲取就可以直接在模板中訪問我們想要得到的值

    <h3>放大10倍的和:{{ $store.getters.bigSum }}</h3>

所以getters就是拿著數據源里面的數據進行加工然后再給你返回加工后的值。由此,state像極了data,而getters像極了computed計算屬性

回到MyCounst組件中, 我們發現一遍遍的書寫$store.state.……實在是過于麻煩,我們的終極目標就是只寫sum、bigSum、school、subject

那有一種辦法就是利用計算屬性,可以實現:這樣就解釋了sum并不是函數名,而是一個計算屬性

    <h1>當前求和為:{{ sum }}</h1><h3>放大10倍的和:{{ bigSum }}</h3><h3>我在{{ school }},學習{{ subject }}</h3>computed: {sum: function asdhaksdjaslkdjasdkalskdl() {return this.$store.state.sum},school() {return this.$store.state.school},subject() {return this.$store.state.subject},bigSum() {return this.$store.getters.bigSum},},

但是!不出意外的話就要出意外了!你不覺得這些計算屬性里面的函數值都很類似嗎? 也同樣是return this.$store.state……,有沒有什么方法可以直接寫一個test函數,然后生成return this.$store.state這么一段,讓我們直接進行調用呢!!

有的兄弟有的!Vue的設計者也想到了這一點,就給我們設計好了mapState

??本節素材已上傳至Gitee:yihaohhh/我愛Vue - Gitee.comhttps://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/26_src_%E6%B1%82%E5%92%8C%E6%A1%88%E4%BE%8B_mapState%E5%92%8CmapGetters

二、 mapState

import { mapState } from 'vuex'

我修改掉函數名, 只是想證明函數名跟配對的屬性值是一組,好讓mapState工作的時候進行映射能看看清楚是同一組數據在進行映射?

  mounted() {const x = mapState({'he':'sum'})console.log(x)}

由于mapState是要求傳入的對象,那么就是key-value進行配對,那么key值永遠都是一個字符串,可以用簡寫形式, 但是value卻不行,如果value就寫成sum, 他就會去尋找sum這個變量,但是我們的sum是一個屬性名啊,也是一個字符串,所以sum要加上引號,讓他是一個字符串

  mounted() {const x = mapState({he:'sum', xuexiao:'school', xueke:'subject'})console.log(x)}

?

但是這里引入mapState確保錯了!這里就要考es6的基本功怎么樣了

由于對象里面是不能直接寫對象的,否則就會報錯

那么我們要是有個obj2也是對象,怎么添加到obj里面呢?

    let obj2 = { x: 100, y: 200 }let obj = {a: 1,b: 2,...obj2}

寫成...obj2就不會報錯了,這樣就是默認將obj里面的元素合并到obj里面!

所以, 你看清楚mapState在控制臺中是一個對象!而computed計算屬性也是一個對象,就不能直接放在computed里面 而是要加...mapState才是能夠將當前的mapState對象里面的值合并到computed里面!

  computed: {// 借助mapState生成計算屬性, 從state中讀取數據 (對象寫法)...mapState({he:'sum', xuexiao:'school', xueke:'subject'})},

此時的computed計算屬性里面就相當于,我寫了那么多一長串的代碼,頁面仍然更新正常,怎么是不是超級方便!

唯一的不一樣就是用mapState生成出來的計算屬性,又單獨在開發者工具里面多開一行,是隸屬于計算屬性的一欄,告訴開發者是你利用mapState來生成的一堆綁定數據

這里就先回到最初的命名規則

    ...mapState({sum:'sum', school:'school', subject:'subject'}),

那么就一定有人說,啊呀!可以用es6簡寫辦法!

    ...mapState({sum, school:'school', subject:'subject'}),

現在可以看到,當前的sum就會被Vue解析成sum: sum, 仍然會遇到上面那個問題,變成key-value值,上面的sum會被解析成'sum' 但是后面那個sum會被去尋找sum變量,找不到而報錯

那么另一種數組寫法,就是采用mapState映射的關系告訴Vue,你這個計算屬性的名字是叫'sum',是從'sum'這個?state的sum屬性中來得到的數據,所以這里的命名就必須要跟state的屬性名字一模一樣,不能在跟上面he作為計算屬性!!!

  computed: {// 數組寫法...mapState(['sum', 'school', 'subject']),},

三、 mapGetters

所以下面還有一個從getters里面取到的值也是一樣的獲取效果

import { mapState, mapGetters } from 'vuex'// 對象寫法...mapGetters({bigSum:'bigSum'})//數組寫法...mapGetters(['bigSum'])

yihaohhh/我愛Vue - Gitee.comhttps://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/27_src_%E6%B1%82%E5%92%8C%E6%A1%88%E4%BE%8B_mapMutations%E5%92%8CmapActions??本節素材已上傳至Gitee:yihaohhh/我愛Vue - Gitee.comhttps://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/27_src_%E6%B1%82%E5%92%8C%E6%A1%88%E4%BE%8B_mapMutations%E5%92%8CmapActions

四、 mapMutations

學懂了上面的計算屬性,后面還有兩個就好理解了!對于commit提交事件也是這么寫,進行引入mapMutations

import { mapState, mapGetters, mapMutations } from 'vuex' methods: {// increment() {//   this.$store.commit('JIA', this.n)// },// decrement() {//   this.$store.commit('JIAN', this.n)// },...mapMutations({increment:'JIA', decrement:'JIAN'}),

但是當我點擊+ 卻報錯了,而'JIA'卻別調用了!?

回到vuex里面觀察是不是傳入值value錯誤了

// 準備mutations——用于操作數據(state)
const mutations = {JIA(state, value) {console.log(value)console.log('mutations被調用了')state.sum += value},JIAN(state, value) {state.sum -= value}
}

是一個鼠標點擊事件,說明就是value傳值錯誤!?

原因就是,原本我們自己寫的increment函數里面是自己帶this.n的參數進行傳入mutations來進行接收,但是我們用mapMutations寫后,就沒有傳入參數給他接收,那么就是默認參數event被傳入

那么只要我們在模板里面調用函數的時候傳參就歐克啦~

    <button @click="increment(n)">+</button><button @click="decrement(n)">-</button>data() {return {n:1, // 用戶當前選擇的數字}},methods: {// increment() {//   this.$store.commit('JIA', this.n)// },// decrement() {//   this.$store.commit('JIAN', this.n)// },// 借助mapMutations生成對應的方法, 方法中會調用commit去聯系mutations// 對象的寫法...mapMutations({increment:'JIA', decrement:'JIAN'}),},

數組寫法

    // 數組的寫法...mapMutations(['JIA', 'JIAN']),// 同樣 模板里面的調用方法得改<button @click="JIA(n)">+</button><button @click="JIAN(n)">-</button>

這里要與vuex里面的mutations里面實現的方法一致

// 準備mutations——用于操作數據(state)
const mutations = {JIA(state, value) {console.log('mutations被調用了')state.sum += value},JIAN(state, value) {state.sum -= value}
}

五、 mapActions

還有最后一步,引入mapActions?

import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'// incrementOdd() {//   this.$store.dispatch('jiaOdd', this.n)// },// incrementWait() {//   this.$store.dispatch('jiaWait', this.n)// }// 對象寫法...mapActions({incrementOdd: 'jiaOdd', incrementWait: 'jiaWait'})// 同樣是要對調用進行傳參<button @click="incrementOdd(n)">當前求和為奇數再加</button><button @click="incrementWait(n)">等一等再加</button>

數組寫法

    ...mapActions(['jiaOdd', 'jiaWait'])// 同樣對函數名的調用就要修改了, 因為數組寫法就會生成同名的函數名和調用屬性<button @click="jiaOdd(n)">當前求和為奇數再加</button><button @click="jiaWait(n)">等一等再加</button>

學到這兒來個小總結:四個map方法的使用

  1. mapState方法:用于幫助我們映射state中的數據為計算屬性

      computed: {//借助mapState生成計算屬性:sum、school、subject(對象寫法)...mapState({sum:'sum',school:'school',subject:'subject'}),//借助mapState生成計算屬性:sum、school、subject(數組寫法)...mapState(['sum','school','subject']),},

  2. mapGetters方法:用于幫助我們映射getters中的數據為計算屬性

      computed: {//借助mapGetters生成計算屬性:bigSum(對象寫法)...mapGetters({bigSum:'bigSum'}),?//借助mapGetters生成計算屬性:bigSum(數組寫法)...mapGetters(['bigSum'])},

  3. mapActions方法:用于幫助我們生成與actions對話的方法,即:包含$store.dispatch(xxx)的函數

      methods:{//靠mapActions生成:incrementOdd、incrementWait(對象形式)...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})?//靠mapActions生成:incrementOdd、incrementWait(數組形式)...mapActions(['jiaOdd','jiaWait'])}

  4. mapMutations方法:用于幫助我們生成與mutations對話的方法,即:包含$store.commit(xxx)的函數

      methods:{//靠mapActions生成:increment、decrement(對象形式)...mapMutations({increment:'JIA',decrement:'JIAN'}),//靠mapMutations生成:JIA、JIAN(對象形式)...mapMutations(['JIA','JIAN']),}

備注:mapActions與mapMutations使用時,若需要傳遞參數需要:在模板中綁定事件時傳遞好參數,否則參數是事件對象。

總結不易~ 本章節對我有很大的收獲, 希望對你也是!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80482.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80482.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80482.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html object標簽介紹(用于嵌入外部資源通用標簽)(已不推薦使用deprecated,建議使用img、video、audio標簽)

文章目錄 HTML <object> 標簽詳解基本語法與核心屬性關鍵屬性解析1. **data**2. **type**3. **width & height**4. **name** 嵌入不同類型的資源1. **嵌入圖像**2. **嵌入音頻**3. **嵌入視頻**4. **嵌入 PDF** 參數傳遞與回退內容**參數&#xff08;<param>&a…

警備,TRO風向預警,In-N-Out Burgers維權風暴來襲

本案是TME律所代理的5月首案&#xff0c;傳奇連鎖快餐品牌In-N-Out Burgers委托維權&#xff01; 案件基本情況&#xff1a; 起訴時間&#xff1a;2025-5-1 案件號&#xff1a;25-cv-04767 品牌&#xff1a;In-N-Out 原告&#xff1a;In-N-Out Burgers 原告律所&#xff…

數據結構算法習題通關:樹遍歷 / 哈夫曼 / 拓撲 / 哈希 / Dijkstra 全解析

已知一棵二叉樹先序遍歷和中序遍歷分別為 ABDEGCFH 和 DBGEACHF&#xff0c;請畫出這個二叉樹的邏輯結構并寫出后序遍歷的序列。 先序遍歷&#xff1a;ABDEGCFH 中序遍歷&#xff1a;DBGEACHF 先序遍歷看出根為A&#xff0c;左子樹DBGE&#xff0c;右子樹CHF A的左子樹 再…

C++GO語言微服務和服務發現

目錄 01 03-go-micro簡介 02 04-服務發現的簡單認識 03 05-consul的安裝 04 06-consul常用的命令 05 07-注冊服務到consul并驗證 06 08-consul健康檢查 07 09-consul結合grpc使用-上&#xff08;只實現grpc遠程調用&#xff09; 08 10-consul結合grpc使用-中&#xff08…

HDFS 常用基礎命令詳解——快速上手分布式文件系統

簡介&#xff1a; 本文面向剛接觸 Hadoop HDFS&#xff08;Hadoop 分布式文件系統&#xff09;的讀者&#xff0c;結合 CSDN 博客風格&#xff0c;系統梳理最常用的 HDFS 客戶端命令&#xff0c;并配以示例和注意事項&#xff0c;幫助你在開發和運維中快速掌握 HDFS 的文件管理…

VUE CLI - 使用VUE腳手架創建前端項目工程

前言 前端從這里開始&#xff0c;本文將介紹如何使用VUE腳手架創建前端工程項目 1.預準備&#xff08;編輯器和管理器&#xff09; 編輯器&#xff1a;推薦使用Vscode&#xff0c;WebStorm&#xff0c;或者Hbuilder&#xff08;適合剛開始練手使用&#xff09;&#xff0c;個…

make和makefile的使用,以及寫一個簡單的進度條程序

1.自動化構建-make/makefile 1.1 背景 一個工程文件中的文件不計其數&#xff0c;其按類型、功能、模塊放在若干目錄中&#xff0c;makefile定義了一系列規則來指定哪些文件需要先編譯&#xff0c;哪些文件需要后編譯&#xff0c;哪些文件需要重新編譯&#xff0c;甚至于過呢…

數據結構中的棧與隊列:原理、實現與應用

前言&#xff1a;棧和隊列是計算機科學中兩種最基礎的線性數據結構&#xff0c;它們的獨特操作規則和廣泛的應用場景使其成為每一位開發者必須掌握的核心知識。本文將通過生活案例、代碼實現和實際應用場景&#xff0c;帶您深入理解這兩種數據結構的精髓。 1.棧&#xff08;Sta…

如何選擇自己喜歡的cms

選擇內容管理系統cms what is cms1.whatcms.org2.IsItWP.com4.Wappalyzer5.https://builtwith.com/6.https://w3techs.com/7. https://www.netcraft.com/8.onewebtool.com如何在不使用 CMS 檢測器的情況下手動檢測 CMS 結論 在開始構建自己的數字足跡之前&#xff0c;大多數人會…

SDC命令詳解:使用all_outputs命令進行查詢

相關閱讀 SDC命令詳解https://blog.csdn.net/weixin_45791458/category_12931432.html all_outputs命令用于創建一個輸出端口對象集合&#xff0c;關于設計對象和集合的更詳細介紹&#xff0c;可以參考下面的博客。 Synopsys&#xff1a;設計對象https://chenzhang.blog.csdn…

vue 中的ref

vue 中的ref vue 中的ref 1. ??ref?? ** 的基本作用** 在 Vue 中&#xff0c;ref 是用來獲取 DOM 元素或者組件實例的一種方式。對于 <el-form> 組件&#xff0c;通過 ref 可以獲取到該表單組件的實例&#xff0c;進而調用表單組件提供的各種方法和訪問其屬性。 …

數據庫版本控制工具--flyway

一. 什么是Flyway Flyway 是一款開源的數據庫遷移工具。它采用簡單直觀的方式管理數據庫變更&#xff0c;通過版本化的遷移腳本確保數據庫結構的一致性和可重復性。無論是開發環境、測試環境還是生產環境&#xff0c;Flyway 都能確保數據庫變更按照預期順序執行&#xff0c;避…

C++使用PoDoFo庫處理PDF文件

&#x1f4da; PoDoFo 簡介 PoDoFo 是一個用 C 編寫的自由開源庫&#xff0c;專用于 讀取、寫入和操作 PDF 文件。它適用于需要程序化處理 PDF 文件的應用程序&#xff0c;比如批量生成、修改、合并、提取元數據、繪圖等。 &#x1f31f; 核心特點 特性說明&#x1f4c4; P…

論文分享? arXiv2025 | TTRL: Test-Time Reinforcement Learning

TTRL: Test-Time Reinforcement Learning TTRL&#xff1a;測試時強化學習 https://github.com/PRIME-RL/TTRL &#x1f4d6;導讀&#xff1a;本篇博客有&#x1f9a5;精讀版、&#x1f407;速讀版及&#x1f914;思考三部分&#xff1b;精讀版是全文的翻譯&#xff0c;篇幅較…

dify插件接入fastmcp示例

文章目錄 1. 使用python完成mcp服務1.1 準備環境&#xff08;python安裝fastmcp&#xff09;1.2 mcp服務端示例代碼1.3 啟動mcp服務端 2. dify接入2.1 安裝MCP SSE和 Agent 策略&#xff08;支持 MCP 工具&#xff09; 插件2.2 dify agent插件配置mcp:2.3 mcp服務配置&#xff…

Linux 挖礦木馬排查命令清單

Linux 挖礦木馬排查命令清單 1. 系統資源使用情況檢查 # 查看CPU、內存使用情況 top -c# 檢查CPU占用最高的進程 ps aux --sort-%cpu# 查找可疑進程名 ps -ef | grep -i miner\|cpu\|GPU\|xmr# 檢查網絡連接情況 lsof -i2. 可疑進程和隱藏進程檢查 # 檢查僵尸進程 ps -ef | …

PyTorch 中如何針對 GPU 和 TPU 使用不同的處理方式

一個簡單的矩陣乘法例子來演示在 PyTorch 中如何針對 GPU 和 TPU 使用不同的處理方式。 這個例子會展示核心的區別在于如何獲取和指定計算設備&#xff0c;以及&#xff08;對于 TPU&#xff09;可能需要額外的庫和同步操作。 示例代碼&#xff1a; import torch import tim…

自主shell命令行解釋器

目標 能處理普通命令能處理內建命令 實現原理 用下面的時間軸來表示時間發生次序。時間從左向右。shell由標識為sh的方塊&#xff0c;它隨著時間從左向右移動。 shell從用戶讀入字符串“ls”。shell建立一個新的進程&#xff0c;然后等待進程中運行ls程序并等待進程結束。 …

如何在sheel中運行Spark

啟動hdfs集群&#xff0c;打開hadoop100:9870&#xff0c;在wcinput目錄下上傳一個包含很多個單詞的文本文件。 啟動之后在spark-shell中寫代碼。 // 讀取文件&#xff0c;得到RDD val rdd1 sc.textFile("hdfs://hadoop100:8020/wcinput/words.txt") // 將單詞進行切…

【入門】數字走向II

描述 輸入整數N&#xff0c;輸出相應方陣。 輸入描述 一個整數N。&#xff08; 0 < n < 10 ) 輸出描述 一個方陣&#xff0c;每個數字的場寬為3。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int in;i>1;i--){for(…