vuex 中輔助函數(shù)mapGetters的基本用法詳解
mapGetters輔助函數(shù)
mapGetters輔助函數(shù)僅僅是將 store 中的 getter 映射到局部計算屬性:
1、在組件或界面中不使用mapGetter調用映射vuex中的getter
1.1 調用映射根部store中的getter
<!-- test.vue -->
<template>
<div class="vuexReponse">
<div @click="changeVal">點擊</div>
<div>"stateHello: "{{stateHello}}</div>
<div>"gettersHello: "{{gettersHello}}</div>
</div>
</template>
<script>
export default {
watch: {
gettersHello(newVal, oldVal) {
console.log("gettersHello newVal", newVal);
console.log("gettersHello oldVal", oldVal);
}
},
computed: {
stateHello() {
return this.$store.state.stateHello
},
gettersHello() {
return this.$store.getters.gettersHello
}
},
methods: {
changeVal() {
this.$store.commit("mutationsHello", 2)
}
}
}
</script>
/**
* store.js
*/
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
stateHello: 1
},
getters: {
gettersHello: (state) => {
return state.stateHello * 2
}
},
mutations: {
mutationsHello(state, val) {
console.log("val", val); // 2
state.stateHello += val
}
},
})
流程: 在test.vue 界面中點擊調用changeVal(), changeVal方法通過commite 傳參val 并調用 store.js中的mutationsHello() 方法,mutationsHello方法修改state中的stateHello的值,在getters 的 gettersHello 中監(jiān)聽stateHello的值,stateHello的值的改變觸發(fā)了gettersHello,在test.vue界面computed 中計算了 store.getters.gettersHello ,這個就將gettersHello 映射到 store.gettes.gettersHello 的值,通過模板 將gettersHello 渲染到dom中,同時由于gettersHello 的改變也能觸發(fā)watch中gettersHello,實現(xiàn)對store.getters.gettersHello 數(shù)據(jù)改變的監(jiān)聽。
1.2 調用映射modules模塊store中的getter
<!-- moduleTest.vue -->
<template>
<div class="vuexReponse">
<div @click="changeVal">點擊</div>
<div>stateHello: {{stateHello}}</div>
<div>gettersHello: {{gettersHello}}</div>
</div>
</template>
<script>
export default {
watch: {
gettersHello(newVal, oldVal) {
console.log("gettersHello newVal", newVal);
console.log("gettersHello oldVal", oldVal);
}
},
computed: {
stateHello() {
return this.$store.state.vuexTest.stateHello
},
gettersHello() {
return this.$store.getters['vuexTest/gettersHello']
}
},
methods: {
changeVal() {
this.$store.commit("vuexTest/mutationsHello", 2)
}
}
}
</script>
/**
* 模塊 vuexTest.js
*/
export default {
namespaced: true,
state: {
stateHello: 1,
},
getters: {
gettersHello: (state, getters, rootState, rootGetters) => {
console.log("state", state);
console.log("getters", getters);
console.log("rootState", rootState);
console.log("rootGetters", rootGetters);
return state.stateHello * 2
}
},
mutations: {
mutationsHello(state, val) {
console.log("1111");
console.log("val", val);
state.stateHello += val
}
},
actions: {
}
}
需要注意的地方是在 computed 中計算映射 模塊中的getters 的方法時 調用方式與 獲取模塊中的state 中的數(shù)據(jù)不同
this.$store.getters['vuexTest/gettersHello']
2、在組件或界面中使用mapGetter調用映射vuex中的getter
2.1 調用映射根部store中的getter
/**
* store.js
*/
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
stateHello: 1
},
getters: {
gettersHello: (state) => {
return state.stateHello * 2
}
},
mutations: {
mutationsHello(state, val) {
state.stateHello += val
}
},
})
<!-- Test.vue -->
<template>
<div class="vuexReponse">
<div @click="changeVal">點擊</div>
<div>stateHello: {{stateHello}}</div>
<div>gettersHello: {{gettersHello}}</div>
<div>gettersHelloOther {{gettersHelloOther}}</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
export default {
name: "vuexReponse",
components: {
},
data() {
return {
}
},
watch: {
gettersHello(newVal, oldVal) {
console.log("gettersHello newVal", newVal);
console.log("gettersHello oldVal", oldVal);
}
},
computed: {
stateHello() {
return this.$store.state.stateHello
},
...mapGetters(["gettersHello"]), // 數(shù)組形式
...mapGetters({ // 對象形式
gettersHello: "gettersHello"
}),
...mapGetters({
gettersHelloOther: "gettersHello" // 對象形式下 改變映射
}),
},
methods: {
changeVal() {
this.$store.commit("mutationsHello", 2)
}
}
}
</script>
2.2 調用映射根部store中的getter
/**
* vuexTest.js
*/
export default {
namespaced: true,
state: {
stateHello: 1,
},
getters: {
gettersHello: (state, getters, rootState, rootGetters) => {
console.log("state", state);
console.log("getters", getters);
console.log("rootState", rootState);
console.log("rootGetters", rootGetters);
return state.stateHello * 2
}
},
mutations: {
mutationsHello(state, val) {
console.log("1111");
console.log("val", val);
state.stateHello += val
}
},
actions: {
}
}
<!-- module test.vue -->
<template>
<div class="vuexReponse">
<div @click="changeVal">點擊</div>
<div>stateHello: {{stateHello}}</div>
<div>gettersHello: {{gettersHello}}</div>
<div>gettersHelloOther {{gettersHelloOther}}</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
export default {
name: "vuexReponse",
watch: {
gettersHello(newVal, oldVal) {
console.log("gettersHello newVal", newVal);
console.log("gettersHello oldVal", oldVal);
}
},
computed: {
stateHello() {
return this.$store.state.vuexTest.stateHello
},
...mapGetters(["vuexTest/gettersHello"]), // 數(shù)組形式
...mapGetters("vuexTest", { // 對象形式
gettersHello: "gettersHello"
}),
...mapGetters("vuexTest", {
gettersHelloOther: "gettersHello" // 對象形式下 改變映射
}),
},
methods: {
changeVal() {
this.$store.commit("vuexTest/mutationsHello", 2)
}
}
}
</script>
這三種形式
...mapGetters(["vuexTest/gettersHello"]), // 數(shù)組形式
...mapGetters("vuexTest", { // 對象形式
gettersHello: "gettersHello"
}),
...mapGetters("vuexTest", {
gettersHelloOther: "gettersHello" // 對象形式下 改變映射
}),
到此這篇關于vuex 中輔助函數(shù)mapGetters的基本用法詳解的文章就介紹到這了,更多相關vuex mapGetters使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Vue3使用Vuex之mapState與mapGetters詳解
- 記一次vuex的mapGetters無效原因及解決
- vuex中...mapstate和...mapgetters的區(qū)別及說明
- vue3.0使用mapState,mapGetters和mapActions的方式
- vuex2中使用mapGetters/mapActions報錯的解決方法
- vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
- 詳解vuex中mapState,mapGetters,mapMutations,mapActions的作用
- Vue Getters和mapGetters的原理及使用示例詳解
相關文章
詳解Vue-Cli 異步加載數(shù)據(jù)的一些注意點
本篇文章主要介紹了詳解Vue-Cli 異步加載數(shù)據(jù)的一些注意點,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
Vue如何整合mavon-editor編輯器(markdown編輯和預覽)
這篇文章主要介紹了Vue整合mavon-editor編輯器(markdown編輯和預覽)的相關知識,mavon-editor是目前比較主流的markdown編輯器,重點介紹它的使用方法,需要的朋友可以參考下2022-10-10

