Vuex之理解Getters的用法实例


Posted in Javascript onApril 19, 2017

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当前模块下所有的gettersmodulePath对应模块的路径

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}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript权威指南 学习笔记之变量作用域分享
Sep 28 Javascript
JavaScript实现点击按钮直接打印
Jan 06 Javascript
快速掌握Node.js环境的安装与运行方法
Feb 16 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
Mar 08 Javascript
AngularJS基础 ng-value 指令简单示例
Aug 03 Javascript
RequireJS简易绘图程序开发
Oct 28 Javascript
JavaScript 计算笛卡尔积实例详解
Dec 02 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
Jan 08 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
Bootstrap表单控件学习使用
Mar 07 Javascript
解析jquery easyui tree异步加载子节点问题
Mar 08 Javascript
JavaScript常用数组操作方法,包含ES6方法
May 10 Javascript
Vuex之理解state的用法实例
Apr 19 #Javascript
微信小程序 聊天室简单实现
Apr 19 #Javascript
Vuex之理解Store的用法
Apr 19 #Javascript
微信小程序 判断手机号的实现代码
Apr 19 #Javascript
Vuex简单入门
Apr 19 #Javascript
微信小程序 滚动到某个位置添加class效果实现代码
Apr 19 #Javascript
微信小程序 slider的简单实例
Apr 19 #Javascript
You might like
把77A收信机改造成收音机
2021/03/02 无线电
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
php中explode函数用法分析
2014/11/15 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
PHP链表操作简单示例
2016/10/15 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
Python中的ctime()方法使用教程
2015/05/22 Python
python之PyMongo使用总结
2017/05/26 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
python基于socket函数实现端口扫描
2020/05/28 Python
pycharm导入源码的具体步骤
2020/08/04 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
后备干部考察材料
2014/02/12 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
民政工作个人总结
2015/02/28 职场文书
爱国主题班会教案
2015/08/14 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript