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的全部内容,希望对大家的学习有所帮助。
热门推荐
十四种宝宝起名方法
eGastroenterology:酒精相关性肝病(ALD):从复杂机制到新视角
道家的思想核心是什么?看完涨知识了!
爱喝果蔬汁、奶茶的请注意!监管局发布自制饮料的食品安全消费提示
探索未来家庭娱乐中心——Kodi Home Theater Software
深圳二模后如何作最后突破?这份备考指南请收好!
如何在研发团队中建立有效的危机管理机制
双眼皮术后护理指南!
广州夜游Citywalk攻略:4条路线带你玩转羊城夜景
职场进阶指南:如何恰到好处地赞美同事与上级
最大心率=220-年龄,你被这个公式骗了多少年
诊疗更进一步,多学科协作助力肿瘤患者健康长生存
全面指南:如何进行版权申请
燕山大学工程学首次登顶ESI全球前1‰,彰显学科建设新高度
走后4年后,如今再看丁真简直判若两人,事实证明不进内娱是对的
全国大学食堂排行top10,不可错过的美食圣地!
项目管理老员工的十大策略
营养费怎么计算和赔偿2024年
临沂市制造业数字化转型发展势头强劲 全国第48、山东第五
杭州交通大升级:萧山机场将建四跑道,沪乍杭铁路直通浦东机场
动态规划详解:从基础概念到实战应用
自费交医保如何进行合理安排?这种安排可能存在哪些风险?
加工校服工厂:校园服饰的打造者
2025年软考和PMP的含金量哪个高?这么选准不会出错!
狄仁杰:历史上的真实形象与全球风靡之谜
关于超速的法律规定有哪些?
笔记本USB接口没反应怎么办?4种原因及解决方法
假开源真噱头?开源大模型和你想的不一样
日本长野县龙王景点:SORA terrace云海绝景攻略
截肢治疗患者的心理康复