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 asp.net 获取当前超链接中的文本
Apr 14 Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
JS实现跟随鼠标立体翻转图片的方法
May 04 Javascript
浅谈Javascript的静态属性和原型属性
May 07 Javascript
javascript+html5实现绘制圆环的方法
Jul 28 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
Dec 07 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
Oct 19 jQuery
使用watch监听路由变化和watch监听对象的实例
Feb 24 Javascript
javascript使用正则实现去掉字符串前面的所有0
Jul 23 Javascript
JS精髓原型链继承及构造函数继承问题纠正
Jun 16 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
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
php 购物车完整实现代码
2014/06/05 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
python写日志封装类实例
2015/06/28 Python
pandas中Timestamp类用法详解
2017/12/11 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
纠风工作实施方案
2014/03/15 职场文书
信息工作经验交流材料
2014/05/28 职场文书
教师个人师德总结
2015/02/06 职场文书
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers