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 相关文章推荐
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
jquery单行文字向上滚动效果的实现代码
Sep 05 Javascript
JQuery radio(单选按钮)操作方法汇总
Apr 15 Javascript
JS实用的动画弹出层效果实例
May 05 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
Jun 23 Javascript
jquery uploadify如何取消已上传成功文件
Feb 08 Javascript
在bootstrap中实现轮播图实例代码
Jun 11 Javascript
利用node.js实现反向代理的方法详解
Jul 24 Javascript
微信小程序网络封装(简单高效)
Aug 06 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
May 26 Javascript
ElementUI Tag组件实现多标签生成的方法示例
Jul 08 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 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反射API示例分享
2016/10/08 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
django富文本编辑器的实现示例
2019/04/10 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
物业客服专员岗位职责
2013/11/30 职场文书
安全教育感言
2014/03/04 职场文书
数字化校园建设方案
2014/05/03 职场文书
高中军训的心得体会
2014/09/01 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书