Vuex中Getters的使用详解:从基础概念到源码解析
创作时间:
作者:
@小白创作中心
Vuex中Getters的使用详解:从基础概念到源码解析
引用
1
来源
1.
http://www.cdweb.net/article/pgsjjg.html
Vuex中的Getters是一个非常重要的概念,它类似于组件中的计算属性,用于对state中的数据进行处理和过滤。本文将从Getters的基础概念出发,详细介绍其使用方法,并深入分析其源码实现。
1. 什么是Getters
在Vuex中,state
用于存放数据,如果需要对数据进行处理和输出,比如数据过滤,通常可以在组件的computed
属性中进行处理。但是,如果多个组件都需要使用同一个过滤后的数据,比如饼状图组件和曲线图组件,那么将这个数据处理逻辑抽离出来并共享就显得尤为重要。这就是getters
存在的意义。我们可以将getters
理解为store
的计算属性。
2. 如何使用Getters
定义Getters
我们可以在store
中定义getters
,其第一个参数是state
。例如:
const getters = {
style: state => state.style
}
传递参数
定义的Getters
会暴露为store.getters
对象,同时也可以接受其他的getters
作为第二个参数:
computed: {
doneTodosCount () {
return this.$store.getters.doneTodosCount
}
}
3. 使用mapGetters辅助函数
mapGetters
辅助函数可以将store
中的getters
映射到局部计算属性中,用法与mapState
类似:
import { mapGetters } from 'vuex'
computed: {
// 使用对象展开运算符将 getters 混入 computed 对象中
...mapGetters([
'doneTodosCount',
'anotherGetter',
])
}
// 给getter属性换名字
mapGetters({
// 映射 this.doneCount 为 store.getters.doneTodosCount
doneCount: 'doneTodosCount'
})
4. 源码分析
wrapGetters
函数用于初始化getters
,它接受3个参数:store
(当前的Store
实例)、moduleGetters
(当前模块下所有的getters
)和modulePath
(对应模块的路径):
function wrapGetters(store, moduleGetters, modulePath) {
Object.keys(moduleGetters).forEach(getterKey => {
const rawGetter = moduleGetters[getterKey]
if (store._wrappedGetters[getterKey]) {
console.error(`[vuex] duplicate getter key: ${getterKey}`)
return
}
store._wrappedGetters[getterKey] = function wrappedGetter(store) {
return rawGetter(
getNestedState(store.state, modulePath), // local state
store.getters, // store上所有的getters
store.state // root state
)
}
})
}
// 根据path查找state上嵌套的state
function getNestedState(state, path) {
return path.length
? path.reduce((state, key) => state[key], state)
: state
}
以上就是Vuex中Getters的全部内容,希望对大家的学习有所帮助。
热门推荐
深度横评:电动汽车、混合动力汽车与燃油汽车的全面对比
徒步背包选购全攻略:从容量到背负系统的全方位指南
户外徒步安全事故频发,“走野”可遵循这些原则
音乐与电影|坂本龙一最好的专辑是哪张?
电脑配件选购终极指南:从需求到配置的精准匹配方案
三道食疗方,巧治牙龈出血
为什么不能增大CPU面积来提高CPU性能
硕士与研究生哪个学历高 有哪些不同
风华墨韵颂宗师——《七律·颂弘一法师》欣赏
一拳超人vs超人,一拳超人VS超人巅峰对决
14部熬夜也要追的古装悬疑剧,《繁城之下》媲美《漫长的季节》
八字地支“三合局”和“三会局”谁的力量大?
高压线电磁辐射的真相:科学检测与风险评估
5本练习英语口语的好书推荐
BOSS 的设计哲学
《黑豹》展女性英雄力量!「娜奇雅」露琵塔尼詠歐勤磨武技扭轉刻板印象
德语的问好
德国人打招呼的方式是什么?
《丰乳肥臀》:莫言写了啥,为何被骂世风日下,甚至一度成为禁书
贸易的力量,一艘帆船既养活了堕落的西班牙,又维持了腐朽的明朝
刘备的汉室宗亲身份真实性探究
交通事故交强险赔偿金标准:全面解析与计算方法
米努特猫好养吗?了解它的性格与饲养技巧
德国双元制揭秘:为什么它能成为职业教育的典范?
纯英文可以注册商标吗?解读外文商标注册规则
“回到未来”的龙飞船
3090显卡和4090显卡的区别在哪
怎么评估安全风险分级管控制度的效果?
六月去新疆赛里木湖景点及旅游攻略
虚拟机如何添加office