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 相关文章推荐
学习ExtJS Panel常用方法
Oct 07 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
Jun 09 Javascript
Node.js中创建和管理外部进程详解
Aug 16 Javascript
一个支持任意尺寸的图片上下左右滑动效果
Aug 24 Javascript
js/jquery判断浏览器的方法小结
Sep 02 Javascript
javascript实现分栏显示小技巧附图
Oct 13 Javascript
JavaScript基础知识点归纳(推荐)
Jul 09 Javascript
用js制作淘宝放大镜效果
Oct 28 Javascript
JavaScript实现前端实时搜索功能
Mar 26 Javascript
用js屏蔽被http劫持的浮动广告实现方法
Aug 10 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
Nov 12 Javascript
详解基于原生JS验证表单组件xy-form
Aug 20 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
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
小区停车场管理制度
2014/01/27 职场文书
捐赠仪式主持词
2014/03/19 职场文书
企业文化建设实施方案
2014/03/22 职场文书
婚礼答谢词范文
2015/09/29 职场文书
2016寒假假期总结
2015/10/10 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
MySQL深分页问题解决思路
2022/12/24 MySQL