欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3使用Vuex之mapState與mapGetters詳解

 更新時間:2023年03月20日 14:06:09   作者:要吃早餐lhy  
這篇文章主要為大家介紹了Vue3使用Vuex之mapState與mapGetters詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1.如何使用?

Vue中我們可以通過點語法很容易的獲取到Vuexstate的值,但當state數(shù)據(jù)比較多時,這樣很不方便,可以借助mapState映射來簡化;由于目前vuex的官網(wǎng)中提供的是Vue2的demo,下面說一下在Vue3中如何使用mapState。
假設(shè):在Vuex中的state具有tokenusername屬性,現(xiàn)在要通過mapState取得tokenusername

Vue3+JS

<script setup>
import { useStore, mapState } from "vuex";
import { computed } from "vue";
const store = useStore();
const mappers = mapState(["token", "username"]);
const mapData = {}
Object.keys(mappers).forEach((item) => {
    mapData[item] = computed(mappers[item].bind({ $store:store }));
});
console.log(mapData)
// ref類型的mapData對象:{token: ComputedRefImpl, username:ComputedRefImpl}
</script>

Vue3+TS(ps:建議直接使用pinia替代Vuex

<script setup lang="ts">
import { useStore, mapState } from "vuex";
import { computed } from "vue";
import type { Ref } from 'vue'
type mappersType = {
    token:() => any,
    username:() => any,
    [propName:string]:any
}
type mapDataType = {
    token:Ref,
    username:Ref,
    [propName:string]:Ref
}
const store = useStore();
const mappers:mappersType = mapState(["token", "username"]) as mappersType
const mapData:mapDataType = {} as mapDataType;
Object.keys(mappers).forEach((item) => {
    mapData[item] = computed(mappers[item].bind({ $store:store }));
});
console.log(mapData)
// ref類型的mapData對象:{token: ComputedRefImpl, username:ComputedRefImpl}
</script>

2.代碼封裝

storeMap.js

import { computed } from 'vue';
/**
* 映射store對應(yīng)的屬性(mapState|mapGetters)
* @param $store useStore()
* @param mappers mapState([])|mapGetters([])
* @returns {[propName:string]: ComputedRefImpl,...}
*/
function getStoreMap($store, mappers) {
    const mapData = {}
    Object.keys(mappers).forEach((item) => {
    mapData[item] = computed(mappers[item].bind({ $store })).value;
    });
    return mapData;
}
export { getStoreMap }

使用

<script setup>
import { useStore, mapState, mapGetters } from "vuex";
import { getStoreMap } from './storeMap'
const store = useStore();
const mappers = mapState(["token", "username"]);
// const mappers = mapGetters(["getToken", "getUsername"]); //也可以獲取mapGetters
const mapData = getStoreMap(store, mappers)
console.log(mapData) // 包含state或getters屬性的ref類型的對象
</script>

3.解題思路

以下是我的一種比較取巧的解題思路,可酌情參考

延用上面的例子
首先,我們先導(dǎo)入mapState,并創(chuàng)建一個空的mapState對象,將鼠標移動至mapState()上查看

可以看到mapState接收的是一個字符串類型的數(shù)組,返回的是一個屬性為string類型,值為Computed類型的對象,可推導(dǎo)這里mapState接收的應(yīng)是["token", "username"]。
const mappers = mapState(["token", "username"]);

再次將鼠標移動至mappers上,查看mappers類型

可以看到mappers是一個對象;
console.log(mappers.token)查看屬性token屬性的值是什么

可以看到mappers.token是一個方法;
通過console.log(mappers.token())調(diào)用輸出這個方法,發(fā)現(xiàn)瀏覽器的控制臺報錯了

錯誤提示Cannot read properties of undefined (reading 'state'),點擊上圖藍色箭頭處查看報錯的源代碼

可以看出整個截圖部分是mapState對象,我們執(zhí)行mappers.token()是圖中標紅的區(qū)域,再結(jié)合報錯信息可知報錯是因為這里的this對象沒有$store屬性。
由于this中只有$store被使用,并沒有用到this的其他屬性,則可以通過bind方式,手動傳一個具有store屬性的this對象進去,并輸出調(diào)用


這時我們可以看到token的值已經(jīng)在瀏覽器被輸出了,然后將bind()后的方法放到computed里執(zhí)行即可得到Ref類型的token對象。

以上就是Vue3使用Vuex之mapState與mapGetters詳解的詳細內(nèi)容,更多關(guān)于Vue3 Vuex mapState mapGetters的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue+elementUI實現(xiàn)簡單日歷功能

    vue+elementUI實現(xiàn)簡單日歷功能

    這篇文章主要為大家詳細介紹了vue+elementUI實現(xiàn)簡單日歷功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Vue中watch監(jiān)聽第一次不觸發(fā)、深度監(jiān)聽問題

    Vue中watch監(jiān)聽第一次不觸發(fā)、深度監(jiān)聽問題

    這篇文章主要介紹了Vue中watch監(jiān)聽第一次不觸發(fā)、深度監(jiān)聽問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue.js中讓人容易忽略的API詳解

    Vue.js中讓人容易忽略的API詳解

    Vue.js是構(gòu)建Web界面的漸進式JavaScript框架,通過簡潔的 API 提供高效的數(shù)據(jù)綁定和靈活的組件系統(tǒng),這篇文章主要給大家介紹了關(guān)于Vue.js中讓人容易忽略的API的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Vue snippets插件原理與使用介紹

    Vue snippets插件原理與使用介紹

    這篇文章主要介紹了Vue snippets插件原理與使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10
  • 詳解Vue中的Props與Data細微差別

    詳解Vue中的Props與Data細微差別

    這篇文章主要介紹了詳解Vue中的Props與Data細微差別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • vue高德地圖繪制行政區(qū)邊界功能

    vue高德地圖繪制行政區(qū)邊界功能

    這篇文章主要介紹了vue高德地圖繪制行政區(qū)邊界功能,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-03-03
  • Vue?項目運行完成后自動打開瀏覽器的方法匯總

    Vue?項目運行完成后自動打開瀏覽器的方法匯總

    這篇文章主要介紹了Vue?項目運行完成后自動打開瀏覽器的多種實現(xiàn)方法,方法一比較適用于vue3,每種方法通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-02-02
  • vue實現(xiàn)井字棋游戲

    vue實現(xiàn)井字棋游戲

    這篇文章主要為大家詳細介紹了vue實現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 利用vue和element-ui設(shè)置表格內(nèi)容分頁的實例

    利用vue和element-ui設(shè)置表格內(nèi)容分頁的實例

    下面小編就為大家分享一篇利用vue和element-ui設(shè)置表格內(nèi)容分頁的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue中的錨點定位問題

    vue中的錨點定位問題

    這篇文章主要介紹了vue中的錨點定位問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論