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中的变量声明早于赋值分析
Mar 01 Javascript
jquery load事件(callback/data)使用方法及注意事项
Feb 06 Javascript
jquery实现手风琴效果实例代码
Nov 15 Javascript
js中iframe调用父页面的方法
Oct 30 Javascript
判断浏览器的内核及版本号方法汇总
Jan 05 Javascript
vue.js 表格分页ajax 异步加载数据
Oct 18 Javascript
jquery获取easyui日期控件的值实现方法
Nov 09 Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 Javascript
js实现一个简单的数字时钟效果
Mar 29 Javascript
javascript系统时间设置操作示例
Jun 17 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 Javascript
vue项目中极验验证的使用代码示例
Dec 03 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
PHP输入流php://input介绍
2012/09/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
bootstrap中的 form表单属性role="form"的作用详解
2017/01/20 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
详解React 条件渲染
2020/07/08 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
python rsa 加密解密
2017/03/20 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
python 读取文件并替换字段的实例
2018/07/12 Python
Django中的cookie和session
2019/08/27 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
家居饰品店创业计划书
2014/01/31 职场文书
小学家长评语大全
2014/04/16 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
个人主要事迹材料
2014/08/26 职场文书
无私奉献演讲稿
2014/09/04 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
地道战观后感500字
2015/06/04 职场文书
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
SpringBoot详解执行过程
2022/07/15 Java/Android