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 08 Javascript
两个DIV等高的JS的实现代码
Dec 23 Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
jquery中EasyUI实现异步树
Mar 01 Javascript
浅谈JS如何实现真正的对象常量
Jun 25 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 Javascript
vue2.0结合Element-ui实战案例
Mar 06 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
Dec 29 Javascript
javascript实现简易的计算器
Jan 17 Javascript
JS轮播图的实现方法
Aug 24 Javascript
jQuery zTree如何改变指定节点文本样式
Oct 16 jQuery
vue动态合并单元格并添加小计合计功能示例
Nov 26 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
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
《和我们一样享受春天》教学反思
2014/02/07 职场文书
人事专员工作职责
2014/02/22 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
如何写观后感
2015/06/19 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS