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 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
JS是否可以跨文件同时控制多个iframe页面的应用技巧
Dec 16 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
Apr 01 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
AngularJs解决跨域问题案例详解(简单方法)
May 19 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
Sep 14 Javascript
对TypeScript库进行单元测试的方法
Jul 18 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
Feb 07 Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 Javascript
vue2.0 解决抽取公用js的问题
Jul 31 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实现汉字验证码和算式验证码的方法
2015/03/07 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
犀利的js 函数集合
2009/06/11 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
意大利团购网站:Groupon意大利
2016/10/11 全球购物
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
大学生自荐信
2013/12/11 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
代办出身证明书
2014/10/21 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
单位工资证明范本
2015/06/12 职场文书
在校证明模板
2015/06/17 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
Vue的生命周期一起来看看
2022/02/24 Vue.js