【Vue2】---->VueX 3 核心概念

官網: Vuex 是什么? | Vuex (vuejs.org)

目錄

介紹

1、安裝

2、新建?store/index.js?專門存放 vuex?

3、 在 main.js 中導入掛載到 Vue 實例上?

?核心概念

1、核心概念 -state 狀態

1、訪問Vuex中的數據?

2、通過$store訪問的語法

3、通過輔助函數

2、 核心概念-mutations

1.定義mutations

2.格式說明

3.組件中提交 mutations

?4、輔助函數- mapMutations

?3、核心概念 - actions

1.定義actions

2.組件中通過dispatch調用

?3、輔助函數 -mapActions

4、 核心概念 - getters

1.定義getters

2.使用getters

2.1原始方式-$store

2.2輔助函數 - mapGetters

5、 核心概念 - module

1、模塊定義?- 準備 state

2、獲取模塊內的state數據

3、獲取模塊內的getters數據?

4、獲取模塊內的mutations方法?

?

5、獲取模塊內的actions方法

?Vuex模塊化的使用小結

1.直接使用

2.借助輔助方法使用


介紹

Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 也集成到 Vue 的官方調試工具?devtools extension?(opens new window),提供了諸如零配置的 time-travel 調試、狀態快照導入導出等高級調試功能。

vuex 是一個 vue 的 狀態管理工具 ,狀態就是數據。
vuex 是一個插件,可以幫我們 管理 vue 通用的數據 (多組件共享的數據)

1、安裝

npm i vuex@3

2、新建?store/index.js?專門存放 vuex?

// 導入 vue
import Vue from 'vue'
// 導入 vuex
import Vuex from 'vuex'
// vuex也是vue的插件, 需要use一下, 進行插件的安裝初始化
Vue.use(Vuex)// 創建倉庫 store
const store = new Vuex.Store()// 導出倉庫
export default store

3、 在 main.js 中導入掛載到 Vue 實例上?

import Vue from 'vue'
import App from './App.vue'
//導入
import store from './store'Vue.config.productionTip = falsenew Vue({render: h => h(App),
//掛載store
}).$mount('#app')

?

?核心概念

1、核心概念 -state 狀態

tate提供唯一的公共數據源,所有共享的數據都要統一放到Store中的State中存儲。

打開項目中的store.js文件,在state對象中可以添加我們要共享的數據。

// 創建倉庫 store
const store = new Vuex.Store({// state 狀態, 即數據, 類似于vue組件中的data,// 區別:// 1.data 是組件自己的數據, // 2.state 中的數據整個vue項目的組件都能訪問到state: {count: 101}
})

1、訪問Vuex中的數據?

  1. 通過$store直接訪問 —> {{ $store.state.count }}
  2. 通過輔助函數mapState 映射計算屬性 —> {{ count }}

?

2、通過$store訪問的語法

獲取 store:1.Vue模板中獲取 this.$store2.js文件中獲取 import 導入 store模板中:     {{ $store.state.xxx }}
組件邏輯中:  this.$store.state.xxx
JS模塊中:   store.state.xxx

3、通過輔助函數

- mapState獲取 state中的數據?

1.第一步:導入mapState (mapState是vuex中的一個函數)

import { mapState } from 'vuex'

2.第二步:采用數組形式引入state屬性

mapState(['count']) 

上面代碼的最終得到的是?類似于

count () {return this.$store.state.count
}

3.第三步:利用展開運算符將導出的狀態映射給計算屬性

  computed: {...mapState(['count'])}

?

?

?

2、 核心概念-mutations

1.定義mutations

const store  = new Vuex.Store({
strict: true,state: {count: 0},// 定義mutationsmutations: {}
})

開啟嚴格模式

通過?strict: true?可以開啟嚴格模式,開啟嚴格模式后,直接修改state中的值會報錯

state數據的修改只能通過mutations,并且mutations必須是同步的

?

2.格式說明

mutations是一個對象,對象中存放修改state的方法

mutations: {// 方法里參數 第一個參數是當前store的state屬性// payload 載荷 運輸參數 調用mutaiions的時候 可以傳遞參數 傳遞載荷addCount (state) {state.count += 1}},2.1 提供mutation函數(帶參數)
mutations: {...addCount (state, count) {state.count = count}
},

3.組件中提交 mutations

this.$store.commit('addCount')2.2 提交mutation
handle ( ) {this.$store.commit('addCount', 10)
}
小tips: 提交的參數只能是一個, 如果有多個參數要傳, 可以傳遞一個對象this.$store.commit('addCount', {count: 10
})

?Vuex中的值和組件中的input雙向綁定案例

App.vue

<input :value="count" @input="handleInput" type="text">export default {methods: {handleInput (e) {// 1. 實時獲取輸入框的值const num = +e.target.value// 2. 提交mutation,調用mutation函數this.$store.commit('changeCount', num)}}
}

store/index.js

mutations: { changeCount (state, newCount) {state.count = newCount}
},

?4、輔助函數- mapMutations

mapMutations和mapState很像,它把位于mutations中的方法提取了出來,我們可以將它導入

import  { mapMutations } from 'vuex'
methods: {...mapMutations(['addCount'])
}

上面代碼的含義是將mutations的方法導入了methods中,等價于

methods: {// commit(方法名, 載荷參數)addCount () {this.$store.commit('addCount')}}

此時,就可以直接通過this.addCount調用了

<button @click="addCount">值+1</button>

?

?

?3、核心概念 - actions

state是存放數據的,mutations是同步更新數據 (便于監測數據的變化, 更新視圖等, 方便于調試工具查看變化),

actions則負責進行異步操作

說明:mutations必須是同步的

1.定義actions

new Vuex.Store({mutations: {changeCount (state, newCount) {state.count = newCount}
}
actions: {setAsyncCount (context, num) {// 一秒后, 給一個數, 去修改 numsetTimeout(() => {context.commit('changeCount', num)}, 1000)}
},
}

?

2.組件中通過dispatch調用

setAsyncCount () {this.$store.dispatch('setAsyncCount', 1111)
}

?3、輔助函數 -mapActions

import { mapActions } from 'vuex'
methods: {...mapActions(['setAsyncCount'])     setAsyncCount//為Actions中的方法名
}//mapActions映射的代碼 本質上是以下代碼的寫法
//methods: {
//  changeCountAction (n) {
//    this.$store.dispatch('setAsyncCount', n)
//  },
//}

直接通過 this.方法 就可以調用

核心概念 -

4、 核心概念 - getters

從state中篩選出符合條件的一些數據,這些數據是依賴state的,此時會用到getters

1.定義getters

  getters: {// getters函數的第一個參數是 state// 必須要有返回值filterList:  state =>  state.list.filter(item => item > 5)}

2.使用getters

2.1原始方式-$store

<div>{{ $store.getters.filterList }}</div>

2.2輔助函數 - mapGetters

computed: {...mapGetters(['filterList'])
}
 <div>{{ filterList }}</div>

?

?

5、 核心概念 - module

如果把所有的狀態都放在state中,當項目變得越來越大的時候,Vuex會變得越來越難以維護

由此,又有了Vuex的模塊化

1、模塊定義?- 準備 state

定義模塊?user?

user中管理用戶的信息狀態 userInfo?modules/user.js

const state = {userInfo: {name: 'zs',age: 18}
}const mutations = {}const actions = {}const getters = {}export default {state,mutations,actions,getters
}

?

store/index.js文件中的modules配置項中,注冊這個模塊

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

使用模塊中的數據, 可以直接通過模塊名訪問?

$store.state.模塊名.xxx?=>?$store.state.user.userInfo

也可以通過 mapState 映射

2、獲取模塊內的state數據

  1. 直接通過模塊名訪問 $store.state.模塊名.xxx? ?
    $store.state.user.userInfo.name
  2. 通過 mapState 映射:
  3. 默認根級別的映射 mapState([ 'xxx' ])
    ...mapState('user', ['userInfo']),
  4. 子模塊的映射 :mapState('模塊名', ['xxx']) - 需要開啟命名空間?namespaced:true

?

3、獲取模塊內的getters數據?

  1. 直接通過模塊名訪問 $store.getters['模塊名/xxx ']
    <div>{{ $store.getters['user/UpperCaseName'] }}</div>
  2. 通過 mapGetters 映射
    1. 默認根級別的映射?mapGetters([ 'xxx' ])
    2. 子模塊的映射?mapGetters('模塊名', ['xxx'])?- 需要開啟命名空間
      computed:{...mapGetters('user', ['UpperCaseName'])
      }

?

4、獲取模塊內的mutations方法?

默認模塊中的 mutation 和 actions 會被掛載到全局,需要開啟命名空間,才會掛載到子模塊。

namespaced:true

調用方式:

  1. 直接通過 store 調用 $store.commit('模塊名/xxx ', 額外參數)
  2. 通過 mapMutations 映射
    1. 默認根級別的映射 mapMutations([ 'xxx' ])
    2. 子模塊的映射 mapMutations('模塊名', ['xxx']) - 需要開啟命名空間
      ...mapMutations('user', ['setUser']),

?

modules/user.js

const mutations = {setUser (state, newUserInfo) {state.userInfo = newUserInfo}
}

5、獲取模塊內的actions方法

調用語法:

  1. 直接通過 store 調用 $store.dispatch('模塊名/xxx ', 額外參數)
  2. 通過 mapActions 映射
    1. 默認根級別的映射 mapActions([ 'xxx' ])
    2. 子模塊的映射 mapActions('模塊名', ['xxx']) - 需要開啟命名空間

modules/user.js

const mutations = {setUser (state, newUserInfo) {state.userInfo = newUserInfo}
}const actions = {setUserSecond (context, newUserInfo) {// 將異步在action中進行封裝setTimeout(() => {// 調用mutation   context上下文,默認提交的就是自己模塊的action和mutationcontext.commit('setUser', newUserInfo)}, 1000)}
}

mapActions映射

<button @click="setUserSecond({ name: 'xc', age: 20 })">一秒后更新信息</button>methods:{...mapActions('user', ['setUserSecond'])
}

?

?Vuex模塊化的使用小結

1.直接使用

  1. state --> $store.state.模塊名.數據項名
  2. getters --> $store.getters['模塊名/屬性名']
  3. mutations --> $store.commit('模塊名/方法名', 其他參數)
  4. actions --> $store.dispatch('模塊名/方法名', 其他參數)

2.借助輔助方法使用

1.import { mapXxxx, mapXxx } from 'vuex'

computed、methods: {

? //?...mapState、...mapGetters放computed中;

? //?...mapMutations、...mapActions放methods中;

? ...mapXxxx('模塊名', ['數據項|方法']),

? ...mapXxxx('模塊名', { 新的名字: 原來的名字 }),

}

2.組件中直接使用 屬性?{{ age }}?或 方法?@click="updateAge(2)"

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

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

相關文章

Java IO流(一)IO基礎

概述 IO流本質 I/O表示Input/Output,即數據傳輸過程中的輸入/輸出,并且輸入和輸出都是相對于內存來講Java IO(輸入/輸出)流是Java用于處理數據讀取和寫入的關鍵組件常見的I|O介質包括 文件(輸入|輸出)網絡(輸入|輸出)鍵盤(輸出)顯示器(輸出)使用場景 文件拷貝&#xff08;File&…

Python自帶的IDLE有什么用

在Python的官方解釋器中&#xff0c;自帶了一個名為IDLE(Interactive DeveLopment Environment)的集成開發環境。 一、簡化代碼調試過程 很多初學者在編寫Python代碼時&#xff0c;經常會遇到一些問題需要調試。而在IDLE中&#xff0c;我們可以通過設置斷點、單步調試等方法&…

算法競賽入門【碼蹄集新手村600題】(MT1160-1180)C語言

算法競賽入門【碼蹄集新手村600題】(MT1160-1180&#xff09;C語言 目錄MT1161 N的零MT1162 數組最大公約數MT1163 孿生質數MT1164 最大數字MT1165 卡羅爾數MT1166 自守數MT1167自守數IIMT1168 階乘數MT1169 平衡數MT1170 四葉玫瑰數MT1171 幻數MT1172 完美數字MT1173 魔數MT11…

es線上處理命令記錄

常用命令 搜索 GET _search {"query": {"match_all": {}} }獲取全部模版 GET _index_template GET _index_template/yst_crawler_template獲取全部索引 GET /_cat/indices?v 獲取當前mapping GET /yst_crawler/_mapping創建一個mapping PUT /yst_c…

WebGL游戲站優化實錄【myshmup.com】

myshmup.com 允許在瀏覽器中創建 shmup&#xff08;射擊&#xff09;游戲。 你可以使用具有創意通用許可證的資源或上傳自己的藝術作品和聲音。 創建的游戲可以在網站上發布。 該平臺不需要編碼&#xff0c;游戲對象的配置是在用戶界面的幫助下執行的。 后端是使用Django框架開…

機器學習筆記 - 使用 ResNet-50 和余弦相似度的基于圖像的推薦系統

一、簡述 這里的代碼主要是基于圖像的推薦系統,該系統利用 ResNet-50 深度學習模型作為特征提取器,并采用余弦相似度來查找給定輸入圖像的最相似嵌入。 該系統旨在根據所提供圖像的視覺內容為用戶提供個性化推薦。 二、所需環境 Python 3.x tensorflow ==2.5.0 numpy==1.21.…

星際爭霸之小霸王之小蜜蜂(三)--重構模塊

目錄 前言 一、為什么要重構模塊 二、創建game_functions 三、創建update_screen() 四、修改alien_invasion模塊 五、課后思考 總結 前言 前兩天我們已經成功創建了窗口&#xff0c;并將小蜜蜂放在窗口的最下方中間位置&#xff0c;本來以為今天將學習控制小蜜蜂&#xff0c;結…

GPT-4一紙重洗:從97.6%降至2.4%的巨大挑戰

斯坦福大學和加州大學伯克利分校合作進行的一項 “How Is ChatGPTs Behavior Changing Over Time?” 研究表明&#xff0c;隨著時間的推移&#xff0c;GPT-4 的響應能力非但沒有提高&#xff0c;反而隨著語言模型的進一步更新而變得更糟糕。 研究小組評估了 2023 年 3 月和 20…

win10安裝mysql和c++讀取調用舉例

一、下載mysql8.rar解壓到C盤(也可以解壓到其他位置) 在系統環境變量添加JAVA_HOMEC:\myslq8&#xff0c;并在path中添加%JAVA_HOME%\bin; 二、以管理員身份進入命令窗口 三、修改配置文件指定安裝路徑和數據庫的存放路徑 四、鍵入如下命令初始化并啟動mysql服務,然后修改登錄…

Rust之泛型、trait與生命周期

泛型是具體類型或其他屬性的抽象替代。在編寫代碼時&#xff0c;可以直接描述泛型的行為&#xff0c;或者它與其他泛型產生的聯系&#xff0c;而無須知曉它在編譯和運行代碼時采用的具體類型。 1、泛型數據類型&#xff1a; 們可以在聲明函數簽名或結構體等元素時使用泛型&am…

TDD(測試驅動開發)?

01、前言 很早之前&#xff0c;曾在網絡上見到過 TDD 這 3 個大寫的英文字母&#xff0c;它是 Test Driven Development 這三個單詞的縮寫&#xff0c;也就是“測試驅動開發”的意思——聽起來很不錯的一種理念。 其理念主要是確保兩件事&#xff1a; 確保所有的需求都能被照…

macOS Ventura 13.5.1(22G90)發布(附黑/白蘋果系統鏡像地址)

系統鏡像下載&#xff1a;百度&#xff1a;黑果魏叔 系統介紹 黑果魏叔 8 月 18 日消息&#xff0c;蘋果今日向 Mac 電腦用戶推送了 macOS 13.5.1 更新&#xff08;內部版本號&#xff1a;22G90&#xff09;&#xff0c;本次更新距離上次發布隔了 24 天。 本次更新重點修復了…

Redis 緩存過期及刪除

一、Redis緩存過期策略 物理內存達到上限后&#xff0c;像磁盤空間申請虛擬內存(硬盤與內存的swap),甚至崩潰。 內存與硬盤交換 (swap) 虛擬內存&#xff0c;頻繁I0 性能急劇下降&#xff0c;會造成redis內存急劇下降&#xff1b; 一般設置物理內存的3/4&#xff0c;在redis…

內存不足V4L2 申請DMC緩存報錯問題

當內存不足時,V4L2可能存在申請DMA緩存報錯,如下日志: 13:36:54:125 [15070.640862] rkcifhw fdfe0000.rkcif: swiotlb buffer is full (sz: 1843200 bytes) 13:36:54:125 [15070.640891] rkcifhw fdfe0000.rkcif: swiotlb: coherent allocation failed, size=1843200 13:3…

超分辨率地震速度模型

文獻分享 1. Multitask Learning for Super-Resolution 原題目&#xff1a;Multitask Learning for Super-Resolution of Seismic Velocity Model 全波形反演&#xff08;FWI&#xff09;是估算地下速度模型的強大工具。與傳統反演策略相比&#xff0c;FWI充分利用了地震波的…

typedef

t y p e d e f typedef typedef 聲明&#xff0c;簡稱typedef&#xff0c;是創建現有類型的新名字。 比如&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long ll; int main() {ll n;scanf("%lld",&n);printf("%lld"…

C++ 面向對象三大特性——多態

?<1>主頁&#xff1a;我的代碼愛吃辣 &#x1f4c3;<2>知識講解&#xff1a;C 繼承 ??<3>開發環境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;面向對象三大特性的&#xff0c;封裝&#xff0c;繼承&#xff0c;多態&#xff…

30W IP網絡有源音箱 校園廣播音箱

SV-7042XT是深圳銳科達電子有限公司的一款2.0聲道壁掛式網絡有源音箱&#xff0c;具有10/100M以太網接口&#xff0c;可將網絡音源通過自帶的功放和喇叭輸出播放&#xff0c;可達到功率30W。同時它可以外接一個30W的無源副音箱&#xff0c;用在面積較大的場所。5寸進口全頻低音…

RNN模型簡單理解和CNN區別

目錄 神經網絡&#xff1a;水平方向延伸&#xff0c;數據不具有關聯性 ? RNN&#xff1a;在神經網絡的基礎上加上了時間順序&#xff0c;語義理解 ?RNN: 訓練中采用梯度下降&#xff0c;反向傳播 ? 長短期記憶模型 ?輸出關系&#xff1a;1 toN&#xff0c;N to N 單入…

Spring三級緩存

目錄 循環依賴問題 三級緩存 三級緩存創建Bean的流程&#xff08;解決循環依賴問題&#xff09; 三級緩存的局限性 Spring的三級緩存是為了解決單例Bean的循環依賴問題而存在的。 循環依賴問題 簡單來說就是A依賴B&#xff0c;而B又依賴A。即創建A的時候&#xff0c;需要先…