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 Zifa FormValid 0.1表单验证 代码打包下载
Jun 08 Javascript
JavaScript 私有成员分析
Jan 13 Javascript
js获取url参数值的两种方式
Sep 10 Javascript
javascript与jquery中跳出循环的区别总结
Nov 04 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
Nov 20 Javascript
jQuery()方法的第二个参数详解
Apr 29 Javascript
JavaScript获取浏览器信息的方法
Nov 20 Javascript
详解自动生成博客目录案例
Dec 09 Javascript
js中DOM三级列表(代码分享)
Mar 20 Javascript
微信小程序实现根据字母选择城市功能
Aug 16 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 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
php单件模式结合命令链模式使用说明
2008/09/07 PHP
php 什么是PEAR?
2009/03/19 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
原生js实现轮播图
2017/02/27 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
经理秘书岗位职责
2013/11/14 职场文书
初三学生评语大全
2014/04/24 职场文书
校园安全演讲稿
2014/05/09 职场文书
助残日活动总结
2014/08/27 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
酒店厨房管理制度
2015/08/06 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL
详解redis分布式锁的这些坑
2021/05/19 Redis
python 进阶学习之python装饰器小结
2021/09/04 Python
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang