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生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
Feb 23 Javascript
Js实现滚动变色的文字效果
Jun 16 Javascript
Javascript字符串拼接小技巧(推荐)
Jun 02 Javascript
最佳的JavaScript错误处理实践
Jul 16 Javascript
js实现的光标位置工具函数示例
Oct 03 Javascript
使用OPENLAYERS3实现点选的方法
Sep 24 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
Dec 05 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
Nov 03 Javascript
vue @click.native 绑定原生点击事件
Apr 22 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
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
Javascript之String对象详解
2016/06/08 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
css3 transform属性详解
2014/09/30 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
GWebs公司笔试题
2012/05/04 面试题
机关门卫岗位职责
2013/12/30 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
解除合同协议书
2014/04/17 职场文书
团拜会策划方案
2014/06/07 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
行政上诉状范文
2015/05/23 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
docker-compose部署Yapi的方法
2022/04/08 Servers