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 相关文章推荐
ExtJs扩展之GroupPropertyGrid代码
Mar 05 Javascript
Jquery AutoComplete自动完成 的使用方法实例
Mar 19 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
Nov 15 Javascript
jQuery实现固定在网页顶部的菜单效果代码
Sep 02 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
Sep 27 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
May 15 Javascript
原生JS:Date对象全面解析
Sep 06 Javascript
js实现倒计时关键代码
May 05 Javascript
javaScript手机号码校验工具类PhoneUtils详解
Dec 08 Javascript
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
Vue+Openlayers自定义轨迹动画
Sep 24 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下escape解码函数的实现方法
2010/08/08 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Python中协程用法代码详解
2018/02/10 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
Python新手学习raise用法
2020/06/03 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
如何将整数int转换成字串String
2014/03/21 面试题
什么叫做SQL注入,如何防止
2016/10/04 面试题
项目专员岗位职责
2013/12/04 职场文书
初一体育教学反思
2014/01/29 职场文书
贷款委托书怎么写
2014/08/02 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
未中标通知书
2015/04/17 职场文书
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server