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 相关文章推荐
图片之间的切换
Jun 26 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
Dec 15 Javascript
JavaScript 一道字符串分解的题目
Aug 03 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
Feb 12 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
Sep 21 Javascript
AngularJS基础 ng-href 指令用法
Aug 01 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
微信小程序实现的一键复制功能示例
Apr 24 Javascript
vue-router的两种模式的区别
May 30 Javascript
JQuery常用简单动画操作方法回顾与总结
Dec 07 jQuery
不刷新网页就能链接新的js文件方法总结
Mar 01 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
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
linux下php上传文件注意事项
2016/06/11 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
jquery radio 操作代码
2011/03/16 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
js实现YouKu的漂亮搜索框效果
2015/08/19 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
python复制文件代码实现
2013/12/23 Python
Python字符串切片操作知识详解
2016/03/28 Python
Python三级菜单的实例
2017/09/13 Python
python2与python3共存问题的解决方法
2018/09/18 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
创伤外科专业推荐信范文
2013/11/19 职场文书
产品售后服务承诺书
2014/05/21 职场文书
庆七一活动总结
2014/08/27 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
新教师个人总结
2015/02/06 职场文书
学生会自荐信
2019/05/16 职场文书