Vuex之理解Store的用法


Posted in Javascript onApril 19, 2017

1.什么是Store?

上一篇文章说了,Vuex就是提供一个仓库,Store仓库里面放了很多对象。其中state就是数据源存放地,对应于与一般Vue对象里面的data(后面讲到的actionsmutations对应于methods)。

在使用Vuex的时候通常会创建Store实例new Vuex.store({state,getters,mutations,actions})有很多子模块的时候还会使用到modules

Vuex之理解Store的用法

总结,Store类就是存储数据和管理数据方法的仓库,实现方式是将数据和方法已对象形式传入其实例中。要注意一个应用或是项目中只能存在一个Store实例!!

2.Store源码分析

class Store{
  constructor (options = {}) {
  // 1.部分2个‘断言函数'判断条件
  assert(Vue, `must call Vue.use(Vuex) before creating a store 
  instance.`) // 在Store实例化之前一定要确保Vue的存在
  assert(typeof Promise !== 'undefined', `vuex requires a Promise polyfill in this browser.`)
  //确保promise存在
  
  // 2.结构赋值拿到options里面的state,plugins和strict
  const {
  state = {}, //rootState
  plugins = [], // 插件
  strict = false //是否严格模式
   } = options
   
  // 3.Store internal state创建store内部属性
  this._options = options //存储参数
  this._committing = false //标识提交状态,保证修改state只能在mutation里面,不能在外部随意修改
  this._actions = Object.create(null) //存储用户定义的actions
  this._mutations = Object.create(null) //存储用户定义的mutations
  this._wrappedGetters = Object.create(null) //存储用户定义的getters
  this._runtimeModules = Object.create(null) //存储运行时的modules
  this._subscribers = [] //存储所有堵mutation变化的订阅者
  this._watcherVM = new Vue() //借用Vue实例的方法,$watch来观测变化
  
  // 4.将dispatch和commit的this指向当前store实例
  const store = this
  const { dispatch, commit } = this
  this.dispatch = function boundDispatch (type, payload) {
  return dispatch.call(store, type, payload)}
  this.commit = function boundCommit (type, payload, options) {
  return commit.call(store, type, payload, options)}}

后面文章逐步分析每一个模块。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE6下js通过css隐藏select的一个bug
Aug 16 Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
Jan 27 Javascript
浅谈javascript事件取消和阻止冒泡
May 26 Javascript
js钢琴按钮波浪式图片排列效果代码分享
Aug 26 Javascript
原生JavaScript实现的简单放大镜效果示例
Feb 07 Javascript
Node.js中DNS模块学习总结
Feb 28 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
Feb 13 Javascript
node.js使用yargs处理命令行参数操作示例
Feb 11 Javascript
Openlayers绘制聚合标注
Sep 28 Javascript
JavaScript仿京东轮播图效果
Feb 25 Javascript
微信小程序 判断手机号的实现代码
Apr 19 #Javascript
Vuex简单入门
Apr 19 #Javascript
微信小程序 滚动到某个位置添加class效果实现代码
Apr 19 #Javascript
微信小程序 slider的简单实例
Apr 19 #Javascript
详解Node.js中exports和module.exports的区别
Apr 19 #Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 #jQuery
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
Apr 19 #Javascript
You might like
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
PHP类的反射用法实例
2014/11/03 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Python编写一个优美的下载器
2018/04/15 Python
python版本的仿windows计划任务工具
2018/04/30 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
Python字符串的常见操作实例小结
2019/04/08 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
为什么说python适合写爬虫
2020/06/11 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
学习决心书
2014/03/11 职场文书
高中生操行评语
2014/04/25 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
分享7个 Python 实战项目练习
2022/03/03 Python
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
mysql序号rownum行号实现方式
2022/12/24 MySQL