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 相关文章推荐
De facto standard 世界上不可思议的事实标准
Aug 29 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
May 27 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
Jun 06 Javascript
node.js中的path.normalize方法使用说明
Dec 08 Javascript
直接拿来用的页面跳转进度条JS实现
Jan 06 Javascript
Bootstrap3制作自己的导航栏
May 12 Javascript
浅谈JS的基础类型与引用类型
Sep 13 Javascript
JavaScript数据结构之二叉树的计数算法示例
Apr 13 Javascript
JavaScript ES6中const、let与var的对比详解
Jun 18 Javascript
Vue实现动态创建和删除数据的方法
Mar 17 Javascript
JS实现电商商品展示放大镜特效
Jan 07 Javascript
angular4实现带搜索的下拉框
Mar 25 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面试题集锦
2012/03/08 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
Django框架 querySet功能解析
2019/09/04 Python
Python3 合并二叉树的实现
2019/09/30 Python
基于Django实现日志记录报错信息
2019/12/17 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
利用Python计算KS的实例详解
2020/03/03 Python
python 下载文件的几种方法汇总
2021/01/06 Python
全球度假村:Club Med
2017/11/27 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
交通法规咨询中心工作职责
2013/11/27 职场文书
艺术设计专业个人求职信范文
2013/12/11 职场文书
小学生操行评语
2014/04/22 职场文书
淘宝店策划方案
2014/06/07 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
MySQL添加索引特点及优化问题
2022/07/23 MySQL