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 相关文章推荐
js实现简单模态窗口,背景灰显
Nov 14 Javascript
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
Apr 01 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
May 11 Javascript
jQuery控制输入框只能输入数值的小例子
Mar 20 Javascript
jquery实现标题字体变换的滑动门菜单效果
Sep 07 Javascript
js实现微信分享代码
Oct 11 Javascript
Bootstrap CSS布局之代码
Dec 17 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
Sep 19 Javascript
jquery+css3实现熊猫tv导航代码分享
Feb 12 jQuery
jQuery实现简单三级联动效果
Sep 05 jQuery
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
微信小程序 聊天室简单实现
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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
2017/03/09 PHP
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
轻松掌握python设计模式之访问者模式
2016/11/18 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
python实现二叉树的遍历
2017/12/11 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
python3跳出一个循环的实例操作
2020/08/18 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
致全体运动员广播稿
2014/02/01 职场文书
八一建军节感言
2014/02/28 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
学校四群教育实施方案
2014/06/12 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
婚礼父母答谢词
2015/01/04 职场文书
会议邀请函
2015/01/30 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
公司辞职信模板
2015/05/13 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python