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语言的思想前提想学习js的朋友可以看看
Apr 01 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
Oct 18 Javascript
关于eval 与new Function 到底该选哪个?
Apr 17 Javascript
js实现点击添加一个input节点
Dec 05 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
Apr 15 Javascript
js 实现数值的千分位及保存小数方法(推荐)
Aug 01 Javascript
js 判断各种数据类型的简单方法(推荐)
Aug 29 Javascript
js HTML5多媒体影音播放
Oct 17 Javascript
js下载文件并修改文件名
May 08 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
javascript  删除select中的所有option的实例
Sep 17 Javascript
Vue的事件响应式进度条组件实例详解
Feb 04 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学习笔记之一
2011/01/17 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
js select option对象小结
2013/12/20 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
python中zip()方法应用实例分析
2016/04/16 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
django的登录注册系统的示例代码
2018/05/14 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
会计专业毕业生自荐信范文
2013/12/20 职场文书
安全先进个人材料
2014/12/29 职场文书
诚信教育主题班会
2015/08/13 职场文书
新学期家长寄语2016
2015/12/03 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书
导游词之日本富士山
2020/01/06 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
python​格式化字符串
2022/04/20 Python
Redis 限流器
2022/05/15 Redis