Vuex之理解Getters的用法实例
作者:何凯 发布时间:2024-05-09 10:42:04
标签:vuex,getters
1.什么是getters
在介绍state中我们了解到,在Store
仓库里,state
就是用来存放数据,若是对数据进行处理输出,比如数据要过滤,一般我们可以写到computed
中。但是如果很多组件都使用这个过滤后的数据,比如饼状图组件和曲线图组件,我们是否可以把这个数据抽提出来共享?这就是getters
存在的意义。我们可以认为,【getters】是store的计算属性。
2.如何使用
定义:我们可以在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 => {
// 遍历先所有的getters
const rawGetter = moduleGetters[getterKey]
if (store._wrappedGetters[getterKey]) {
console.error(`[vuex] duplicate getter key: ${getterKey}`)
// getter的key不允许重复,否则会报错
return
}
store._wrappedGetters[getterKey] = function `wrappedGetter` (store{
// 将每一个getter包装成一个方法,并且添加到store._wrappedGetters对象中,
return rawGetter(
//执行getter的回调函数,传入三个参数,(local state,store getters,rootState)
getNestedState(store.state, modulePath), // local state
//根据path查找state上嵌套的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}
来源:https://segmentfault.com/a/1190000009105708


猜你喜欢
- 问题一般在服务器上进行环境安装的时候有多种方式,比如docker, conda等。conda肯使用起来更加简便,docker更适合服务器部署
- 可变参数可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如def testArg(*arg)你可以传入任意多个元
- 去掉html中的table代码 Function OutTable(str) dim a,re&nb
- 运行结果:程序代码如下:#将excel中的数据进行读取分析import openpyxlimport numpy as npimport m
- 有时你会发现你写的视图函数是十分类似的,只有一点点的不同。 比如说,你有两个视图,它们的内容是一致的,除了它们所用的模板不太一样:# url
- 本文实例讲述了python 实现的发送邮件模板。分享给大家供大家参考,具体如下:##发送普通txt文件(与发送html邮件不同的是邮件内容设
- 本文实例讲述了Python使用numpy产生正态分布随机数的向量或矩阵操作。分享给大家供大家参考,具体如下:简单来说,正态分布(Normal
- 在上一讲代码的基础上,做进一步修改,成为了如下程序,请看官研习这个程序:#!/usr/bin/env python#coding:utf-8
- 前端通过Ajax来获取服务器资源时,会存在跨域问题。因为Ajax只能同源使用(预防某些恶意行为),所以当访问不在同一个域中的资源时,就会出现
- 本文实例讲述了Python实现周期性抓取网页内容的方法。分享给大家供大家参考,具体如下:1.使用sched模块可以周期性地执行指定函数2.在
- php实现记住密码自动登录方法不止一个,下面出现有二个emptyempty,其实是一个,那是因为代码高亮有bug。希望对大家有帮助。 一,用
- 本文实例讲述了JavaScript基于setTimeout实现计数的方法。分享给大家供大家参考。具体实现方法如下:var count = 0
- 本文实例讲述了JavaScript中匿名函数用法。分享给大家供大家参考。具体分析如下:JS中可以不用给函数名称,而是在使用时直接通过func
- 在Git简介一文中已经对Git进行了简单的介绍,但是理论知识过于枯燥,加上本人专业知识不够扎实,使得初学者在Git的使用上还是会有很大的困难
- 基本使用首先要下载 pymysqlpip install pymsql以下是 pymysql 的基本使用import pymysql# 链接
- wx包中的方法都是以大写字母开头的,而这和Python的习惯是相反的。本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带
- 一 导言设计一个好的用户系统往往不是那么容易,Django提供的用户系统可以快速实现基本的功能,并可以在此基础上继续扩展以满足我们的需求。先
- 从本地文件夹中选取一张图片并在canvas上显示from tkinter import *from tkinter import filed
- 给网页添加打印按钮,除了打印之外,还有页面设置、打印预览、复制本文链接到剪贴板等网页基本应用。正象我在图中标注的,大部分按钮只能适用于IE浏
- MAH一:MAH架构介绍MHA (Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由