【vuex之五大核心概念】

vuex:五大核心概念

  • 一、state狀態
    • 1.state的含義
    • 2.如何訪問以及使用倉庫的數據
      • (1)通過store直接訪問
        • 獲取store對象
      • (2)通過輔助函數MapState
  • 二、mutations
    • 1.作用
    • 2.嚴格模式
    • 3.操作流程
      • 定義 mutations 對象,對象中存放修改 state 的方法
      • 組件通過commit調用mutations進行修改
    • 4.mutations傳參
      • mutation 對象中定義帶參函數
      • 提交調用 mutation
    • 5.輔助函數mapMutations
      • (1)作用
      • (2)操作步驟
  • 三、actions
    • 1.作用
    • 2.操作流程
    • 3.輔助函數mapActions
      • 作用
      • 流程
  • 四、getters
    • 1.作用
    • 2.操作流程
    • 3.輔助函數mapGetters
  • 五、module(分包管理)
    • 1.作用
    • 2.創建module模塊
    • 3.直接使用模塊中的數據
      • (1)方式一:直接通過模塊名訪問
      • (2)方式二:mapState
    • 4.使用模塊中getters的數據
      • (1)方式一:直接通過模塊名訪問
      • (2)方式二:mapGetters
    • 5.調用模塊中的mutation
      • (1)方式一:直接調用
      • (2)方式二:mapMutation
    • 6.調用模塊中的actions
      • (1)方式一:直接調用
      • (2)方式二:mapAction
  • 六、總結

一、state狀態

1.state的含義

是整個應用的倉庫,存儲共用的數據

2.如何訪問以及使用倉庫的數據

一般來說,都有直接訪問和通過輔助函數進行訪問這兩種方式

(1)通過store直接訪問

獲取store對象
適用場景語法
Vue 組件內部訪問 store 對象this.$store
普通的 js 模塊中獲取 store 對象import store from ‘.xxx/store’
使用數據
適用場景語法
vue模板中{{ $store.state.xxx}}
Vue組件的js邏輯代碼中this.$store.state.xxx
普通的 js 模塊中store.state.xxx

(2)通過輔助函數MapState

輔助函數能幫助我們簡化代碼,使用起來更加方便

//store下的index.js文件
const store = new Vuex.Store({state: {name:"小美“}
//在需要使用的組件內導入mapState
import { mapState } from 'vuex'
//用數組方式引入State,用展開運算符進行映射
export default {computed: mapState(['name']),}

這樣,我們就可以在模板中直接使用 {{ name }} 來獲取并展示 name 的值。

二、mutations

1.作用

用于修改倉庫里面的數據
原因:在vuex中同樣要遵循單項數據流,組件是不能直接修改倉庫中的數據的,所以我們需要在用mutations修改數據

2.嚴格模式

因為vuex不允許組件直接修改倉庫里的數據,為了避免某些錯誤寫法可能導致無效的問題,我們可以通過開啟嚴格模式檢查問題

//store/index.js
const store =new Vuex.Store({strict:true,state:{xxxxxx}
})

3.操作流程

定義 mutations 對象,對象中存放修改 state 的方法

const store = new Vuex.Store({
state: {name:"小美”
},
// 定義mutations對象
mutations: {
// 第一個參數要求是當前store的state屬性
changeName (state) {state.name:"小帥“}}
})

組件通過commit調用mutations進行修改

this.$store.commit('changeName')

4.mutations傳參

mutation 對象中定義帶參函數

mutations: {
changeName (state,name) {state.name:name}
}

提交調用 mutation

this.$store.commit('changeName', 小羊)

注意:傳參只能傳state和一個自定義的參數,不支持傳多個參數,但是支持傳state和一個對象/數組

5.輔助函數mapMutations

(1)作用

把mutation中定義的方法提取出來,映射在組件中的methods

(2)操作步驟

store/index文件中定義mutation對象的代碼不變

//在需要使用的組件內導入mapMutations
import { mapMutations } from 'vuex'
//映射在methodss中
methods: {
...mapMutations(['changeName'])
}

就可以直接調用倉庫里的方法,例如,模板里

    <button @click="changeName(‘大灰狼’)">點一下我就改名</button>

而在組件js邏輯代碼塊中用this.changeName(‘大灰狼’)即可調用

三、actions

1.作用

用于處理異步操作
注意:actions處理異步,mutations只能處理同步,actions中的異步操作也是在調用mutations中定義的方法

2.操作流程

下面給出一個一秒后給數組增添一個數的例子:

// store.jsstate () {return {list: []}
},
mutations = {addNumber(state, number) {state.list.push(number);}
}
actions = {async addNumberWithDelay(context,number) {setTimeout(()=>{context.commit('addNumber',number)},1000)	}
}

頁面中用dispatch調用actions的方法

this.$store.dispatch('addNumberWithDelay', 666)

3.輔助函數mapActions

作用

把在actions中的方法提取出來,映射在組件中的methods方法里

流程

在需要使用的組件里直接導入:

import { mapActions } from 'vuex'
methods: {
...mapActions(['addNumberWithDelay'])
}

在組件js邏輯代碼塊中用this.addNumberWithDelay(666’)即可調用

四、getters

1.作用

基于state里的數據進行一些操作
類似于computed計算屬性

2.操作流程

例如,我們要對state里面定義好的一個數組進行篩選,篩選得到一個全是正數的列表

// store.jsconst state = {numbers: [1, -2, 3, -4, 5]
};const getters = {positiveNumbers: state => {return state.numbers.filter(num => num > 0);}
};

在需要的組件中得到該方法篩選后的數組

 return this.$store.getters.positiveNumbers

3.輔助函數mapGetters

同樣也是提取getters中的方法,映射在computed中

import { mapGetters } from 'vuex'
methods: {
...mapGetters(['positiveNumbers'])
}

在組件js邏輯代碼塊中用this.positiveNumbers即可調用
注意:如果是在模板中調用是{{ positiveNumbers }},具體語法在上文表格中已經提到過:點我跳轉查看

五、module(分包管理)

1.作用

在 Vuex 中,使用 module 可以把 store 分割成多個小模塊,每個模塊都有自己的 state、mutations、actions、getters 等屬性,從而使得 Vuex 管理較為復雜的應用程序變得更加方便和靈活
因為一個應用會涉及到很多板塊的數據,為了防止store特別膨脹復雜,管理起來更加麻煩,所以我們需要進行拆分,這樣方便后續進行維護、擴展和升級等等……

2.創建module模塊

大致思路是在store文件目錄下新建modules文件夾,再創建不同板塊的js文件。各個板塊的文件中都有屬于自己的state,mutations,actions和gettters.
下面舉一個user的例子:

// store/modules/user.js
const state = {userInfo: {name:‘敲代碼的小樂最快樂’,isLoggedIn: false}
}
const mutations = {}
const actions = {}
const getters = {}
export default {
state,
mutations,
actions,
getters
}

接著再導入注冊user板塊就大功告成:

import user from './modules/user'
const store = new Vuex.Store({
modules: {
user
}
})

3.直接使用模塊中的數據

當使用 Vuex 存儲數據時,即使將數據拆分到不同的模塊中,實際上子模塊的狀態仍然會被掛載在根級別的狀態下,并且屬性名就是模塊名。

(1)方式一:直接通過模塊名訪問

你可以使用 $store.state.模塊名.xxx 的方式直接訪問模塊中的數據。

(2)方式二:mapState

mapState 映射根級別的狀態:mapState(['xxx'])
映射子模塊的狀態:子模塊需要開啟命名空間namespaced:true,使用mapState('模塊名', ['xxx'])進行訪問。

export default {
namespaced: true,
state,
mutations,
actions,
getters
}

4.使用模塊中getters的數據

(1)方式一:直接通過模塊名訪問

你可以使用$store.getters['模塊名/xxx '] 的方式直接訪問

(2)方式二:mapGetters

mapGetters 映射根級別的狀態:mapGetters([ 'xxx' ])
映射子模塊的狀態:子模塊需要開啟命名空間,使用mapGetters('模塊名', ['xxx'])進行訪問。

5.調用模塊中的mutation

(1)方式一:直接調用

你可以直接通過 store 調用: $store.commit('模塊名/xxx ', 額外參數)

(2)方式二:mapMutation

mapMutations 映射根級別的狀態:mapMutations([ 'xxx' ])
映射子模塊的狀態:子模塊需要開啟命名空間,通過mapMutations('模塊名', ['xxx']))調用。

6.調用模塊中的actions

(1)方式一:直接調用

你可以直接通過 store 調用: $store.dispatch('模塊名/xxx ', 額外參數)

(2)方式二:mapAction

mapActions 映射根級別的狀態:mapActions([ 'xxx' ])
映射子模塊的狀態:子模塊需要開啟命名空間,通過mapActions('模塊名', ['xxx']))調用。

六、總結

vuex的前四大核心概念:state、mutations、getters和actions都有自己的“mapxxx”函數,它都是把其本身的方法提取出來,以映射在組件的方式訪問(state和getters是映射在computed中)或者調用(mutations和actions映射在methods中)。
最后的一個核心概念是modules,它存在的意義在于對跟級別的store進行分包管理。
關系圖:
在這里插入圖片描述

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

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

相關文章

Freesia 項目引用的依賴

UML圖 項目總依賴 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.0</version> </parent> <groupId>com.freesia</groupId> <artifa…

計算機網絡_2.1 物理層概述

2.1 物理層概述 一、物理層要實現的功能二、物理層接口特性 B站 深入淺出計算機網絡 2.1物理層概述 一、物理層要實現的功能 物理層要實現的功能就是在各種傳輸媒體上傳輸比特0和1&#xff0c;進而給上面的數據鏈路層提供透明傳輸比特流的服務。 數據鏈路層“看不見”&#xff…

劍指offer面試題22:鏈表中倒數第k個節點

面試題22&#xff1a;鏈表中倒數第k個節點 題目&#xff1a; 實現一種算法&#xff0c;找出單向鏈表中倒數第 k 個節點。返回該節點的值。 示例&#xff1a; 輸入&#xff1a; 1->2->3->4->5 和 k 2 輸出&#xff1a; 4思路&#xff1a; 1、求倒數第k個節點的…

設計模式-命令模式(Command Pattern)

承接Qt/C軟件開發項目&#xff0c;高質量交付&#xff0c;靈活溝通&#xff0c;長期維護支持。需求所尋&#xff0c;技術正適&#xff0c;共創完美&#xff0c;歡迎私信聯系&#xff01; 一、命令模式的說明 命令模式&#xff08;Command Pattern&#xff09;是一種行為設計模式…

跨境代購系統獨立站:掌握核心競爭優勢,打造專業國際購物體驗

跨境代購系統獨立站&#xff08;獲取代購系統獨立站演示&#xff09;的核心競爭優勢可能包括&#xff1a; 獨立性&#xff1a;獨立站不依賴于任何第三方電商平臺&#xff0c;擁有自己的域名和網站空間&#xff0c;可以自主控制網站的設計和內容。靈活性&#xff1a;獨立站不受…

springboot基于web的網上攝影工作室的開發與實現論文

網上攝影工作室 摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了網上攝影工作室的開發全過程。通過分析網上攝影工作室管理的不足&#xff0c;創建了一個計算機管理網上攝影工作室的方案。文章介紹了網上攝影工…

微信小程序云開發教程——墨刀原型工具入門(動態組件)

引言 作為一個小白&#xff0c;小北要怎么在短時間內快速學會微信小程序原型設計&#xff1f; “時間緊&#xff0c;任務重”&#xff0c;這意味著學習時必須把握微信小程序原型設計中的重點、難點&#xff0c;而非面面俱到。 要在短時間內理解、掌握一個工具的使用&#xf…

0基礎跨考計算機|408保姆級全年計劃

我也是零基礎備考408&#xff01; 雖說是計算機專業&#xff0c;但是本科一學期學十幾門,真的期末考試完腦子里什么都不進的...基本都是考前一周發瘋學完水過考試...&#x1f605; 想要零基礎跨考可以直接從王道開始&#xff01;跟教材一點一點啃完全沒必要&#x1f978; 現在…

八股文打卡day25——數據庫(2)

面試題&#xff1a;講一下事務的四大特性&#xff1f; 我的回答&#xff1a; ACID A代表原子性&#xff0c;一個事務代表一個業務&#xff0c;要么全部都完成&#xff0c;要么全部都不完成。如果事務執行失敗了&#xff0c;會回滾到最原來的狀態。 C代表一致性&#xff0c;舉…

【STM32】江科大STM32學習筆記匯總(50)

00. 目錄 文章目錄 00. 目錄01. STM32學習筆記匯總02. 相關資料下載03. 附錄 01. STM32學習筆記匯總 【STM32】STM32學習筆記-課程簡介(01) 【STM32】STM32學習筆記-STM32簡介(02) 【STM32】STM32學習筆記-軟件安裝(03) 【STM32】STM32學習筆記-新建工程(04) 【STM32】STM…

venv、pip、conda、anaconda、miniconda的區別和優缺點,和徹底清除python多余的環境

virtualenv(venv) 這是一個虛擬環境管理器&#xff0c;它可以讓你每個項目甚至每個腳本配置一個自定義的Python解釋器環境&#xff0c;這最大的好處是我可以不污染開發環境。? pip pip 是 Python 最常用的包管理器&#xff0c;它能自動處理依賴 。 conda 如果說venv是虛擬…

CSS特性

小技巧&#xff1a;在調試工具中&#xff0c;css樣式上看層疊&#xff0c;下看繼承。 1、層疊性 相同的屬性會被覆蓋&#xff0c;不同的屬性會疊加 2、繼承性 3、優先級 基于不同種類的選擇器的匹配規則。 通配符 < 標簽 < 類選擇器 < id選擇器 < 行內樣式 <…

大語言模型(LLM)技術名詞表(一)

LLMs on a Phone&#xff1a;指在手機設備上運行的大型語言模型。 Scalable Personal AI&#xff1a;指用戶可以在個人設備上對AI模型進行微調的技術。 Responsible Release&#xff1a;發布AI模型時考慮社會、法律和倫理影響的做法。 Multimodality&#xff1a;AI模型能處理…

一起玩兒平衡車(ESP32)——02 平衡車的組裝與接線方法

摘要&#xff1a;本文介紹平衡車的組裝與接線方法 前邊介紹了所要實現的平衡車的組成&#xff0c;接下來就來把小車組裝起來。首先是下層底板的底面要固定兩個輪子。這個只要固定孔位沒有問題&#xff0c;用螺絲直接將輪子支架固定上去就可以了。固定好后如下圖所示&#xff1…

基礎小白快速入門c語言--

變量&#xff1a; 表面理解&#xff1a;在程序運行期間&#xff0c;可以改變數值的數據&#xff0c; 深層次含義&#xff1a;變量實質上代表了一塊兒內存區域&#xff0c;我們可以將變量理解為一塊兒內存區域的標識&#xff0c;當我們操作變量時&#xff0c;相當于操作了變量…

代碼隨想錄算法訓練營Day38|509. 斐波那契數、70. 爬樓梯、746. 使用最小花費爬樓梯

509. 斐波那契數 題目鏈接&#xff1a;509. 斐波那契數 文檔鏈接&#xff1a;509. 斐波那契數 視頻鏈接&#xff1a;手把手帶你入門動態規劃 | LeetCode&#xff1a;509.斐波那契數 C實現 class Solution { public:int fib(int n) {if(n 0) return 0;if(n 1) return 1;int a…

罐頭魚AI傳單功能操作說明|二次剪輯創作|AI智剪|批量剪輯視頻

罐頭魚AI傳單功能操作說明 1. 首頁顯示 賬號登錄狀態 可綁定賬號數量 已綁定賬號數量 已綁定賬號顯示 顯示最近上傳視頻素材 顯示新上傳素材列表 QQ:290615413 2. 抖音賬號綁定功能 顯示登錄賬號 已綁定賬號 可綁定賬號數量 可授權綁定抖音賬號 3. 賬號管理列表 顯…

Netty5 入門HelloWorld

一、客戶端代碼及關鍵類說明 /*** netty5的客戶端* author -zhengzx-**/ public class ClientSocket {public static void main(String[] args) {//服務類Bootstrap bootstrap new Bootstrap();//workerEventLoopGroup worker new NioEventLoopGroup();try {//設置線程池boo…

RC正弦波振蕩電路

RC正弦波振蕩電路 RC正弦波振蕩電路又稱文氏電橋振蕩電路&#xff0c;可以設計頻率為f1/2πRC的正弦波發生器。 RC正弦波振蕩電路設計&#xff1a;50Hz,振幅為3.47V 電路分析&#xff1a; 1.起振條件取決于R1, R4&#xff0c;R2與1N4148并聯電阻&#xff08;下面簡稱Rf&#…

B端系統:OA界面設計,把用戶當傻瓜吧, 少讓用戶吃瓜

OA系統是稍具規模的企業最常用的系統&#xff0c;有些OA系統體驗非常逆天&#xff0c;把用戶當成了吃瓜群眾&#xff0c;看看熱鬧還行&#xff0c;一旦上手操作就抓瞎了&#xff0c;大千UI工場結合自身經驗對這個問題進行分析&#xff0c;希望可以拋磚引玉。 一、OA概述 OA系…