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中valueOf与toString区别浅析
Mar 19 Javascript
表单序列化与jq中的serialize使用示例
Feb 21 Javascript
javascript自定义的addClass()方法
May 28 Javascript
浅谈window对象的scrollBy()方法
Jul 15 Javascript
Node.js中用D3.js的方法示例
Jan 16 Javascript
vue实现商城购物车功能
Nov 27 Javascript
详解webpack+express多页站点开发
Dec 22 Javascript
浅谈Vue数据绑定的原理
Jan 08 Javascript
微信小程序实现人脸检测功能
May 25 Javascript
Node.js笔记之process模块解读
May 31 Javascript
CryptoJS中AES实现前后端通用加解密技术
Dec 18 Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
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实现汉字验证码和算式验证码的方法
2015/03/07 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
基于jQuery实现瀑布流页面
2017/04/11 jQuery
angularjs实现猜数字大小功能
2020/05/20 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python实现AES加密解密
2019/03/28 Python
Python3.8中使用f-strings调试
2019/05/22 Python
Python偏函数实现原理及应用
2020/11/20 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
全球度假村:Club Med
2017/11/27 全球购物
《水上飞机》教学反思
2014/04/10 职场文书
交通违章检讨书
2014/09/21 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
2014年营业员工作总结
2014/11/18 职场文书
经费申请报告范文
2015/05/18 职场文书
获奖感言怎么写
2015/07/31 职场文书
nginx设置资源请求目录的方式详解
2022/05/30 Servers