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 相关文章推荐
用倒置滤镜把div倒置,再把table倒置。
Jul 31 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
Nov 09 Javascript
JS获得浏览器版本和操作系统版本的例子
May 13 Javascript
js生成随机数的方法实例
Oct 16 Javascript
AngularJS入门教程之ng-checked 指令详解
Aug 01 Javascript
超全面的vue.js使用总结
Feb 12 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
vue-router 导航钩子的具体使用方法
Aug 31 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
Sep 27 Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 Javascript
vue.js的简单自动求和计算实例
Nov 08 Javascript
用JS实现飞机大战小游戏
Jun 09 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
我的论坛源代码(三)
2006/10/09 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
2013/11/18 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
python如何判断IP地址合法性
2020/04/05 Python
python中的测试框架
2020/11/13 Python
世界上最大的二手相机店:KEN
2017/05/17 全球购物
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
电气工程和自动化自荐信范文
2013/12/25 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
MySQL学习之基础操作总结
2022/03/19 MySQL
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
MySQL三种方式实现递归查询
2022/04/18 MySQL