Vuex之理解state的用法实例


Posted in Javascript onApril 19, 2017

1.什么是state?

上一篇文章说了,Vuex就是提供一个仓库,仓库里面放了很多对象。其中state就是数据源存放地,对应于与一般Vue对象里面的data(后面讲到的actionsmutations对应于methods)。

响应书存储:state里面存放的数据是响应式的,Vue组件从store中读取数据,若是store中的数据发生改变,依赖这个数据的组件也会发生更新。(这里“状态”=“数据”),也就是是说数据和视图是同步的。

2.局部状态

获取:在Vue组件中获取数据,最直接的可以通过计算属性中获取;

组件仍然可以保存局部状态:虽然说VuexStore仓库让我们同一管理数据变得更加方便,但是代码一多也会变得冗长,有些组件的数据是自己严格自用,我们可以将state放在组件自身,作为局部数据,专供此组件使用,其他的组件不能用。

3.mapState

mapState的作用是把全局的 state getters 映射到当前组件的 computed 计算属性中,this.$store.state

使用示例

import {mapState} from 'vuex' 
 export default {
 computer :
 mapState({
  count: state => state.count,
  'count' // 映射 this.count 为 store.state.count
 })
}

看看源码

export function mapState (states) {
  const res = {}  //定义一个对象
  normalizeMap(states).forEach(({ key, val }) => {
  // normalizeMap()函数初始化states数据
     res[key] = function mappedState () {
      return typeof val === 'function'
      // 判断val是否是函数
      ? val.call(this, this.$store.state, this.$store.getters)
      // 若val是函数,将store的state和getters作为参数,返回值作为mapped State的返回值
      : this.$store.state[val]}})
    return res // 返回的是一个函数
  }
//初始化方法 
 function normalizeMap (map) {
    return Array.isArray(map) //判断state是否是数组
    ? map.map(key => ({ key, val: key }))
    // 是数组的话,调用map方法,将每一个数组元素转换成{key,val:key}
    : Object.keys(map).map(key => ({ key, val: map[key] }))
    // 否则就是对象,遍历对象,将每一个val变成val:key
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript下function声明一些小结
Dec 28 Javascript
五个jQuery图片画廊插件 推荐
May 12 Javascript
JavaScript新增样式规则(推荐)
Jul 19 Javascript
微信小程序 wxapp内容组件 text详细介绍
Oct 31 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
Nov 10 Javascript
jquery购物车结算功能实现方法
Oct 29 Javascript
jquery代码规范让代码越来越好看
Feb 03 Javascript
详解vue-router和vue-cli以及组件之间的传值
Jul 04 Javascript
浅谈node中的cluster集群
Jun 02 Javascript
前端axios下载excel文件(二进制)的处理方法
Jul 31 Javascript
了解Javascript中函数作为对象的魅力
Jun 19 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
Jul 22 Javascript
微信小程序 聊天室简单实现
Apr 19 #Javascript
Vuex之理解Store的用法
Apr 19 #Javascript
微信小程序 判断手机号的实现代码
Apr 19 #Javascript
Vuex简单入门
Apr 19 #Javascript
微信小程序 滚动到某个位置添加class效果实现代码
Apr 19 #Javascript
微信小程序 slider的简单实例
Apr 19 #Javascript
详解Node.js中exports和module.exports的区别
Apr 19 #Javascript
You might like
PHP怎样调用MSSQL的存储过程
2006/10/09 PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
jQuery拖拽 & 弹出层 介绍与示例
2013/12/27 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
详解Python自建logging模块
2018/01/29 Python
浅谈django的render函数的参数问题
2018/10/16 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
教师求职推荐信范文
2013/11/20 职场文书
环保专项行动方案
2014/05/12 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
入党转正申请书范文
2019/05/20 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
Vue监视数据的原理详解
2022/02/24 Vue.js
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript