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 相关文章推荐
比较全面的event对像在IE与FF中的区别 推荐
Sep 21 Javascript
JavaScript 三种不同位置代码的写法
Oct 25 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
Jan 06 Javascript
在JavaScript中判断整型的N种方法示例介绍
Jun 18 Javascript
jQuery设置指定网页元素宽度和高度的方法
Mar 25 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
利用jQuery中的ajax分页实现代码
Feb 25 Javascript
基于jQuery实现页面搜索功能
Mar 26 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
Nov 15 Javascript
Vue 实现树形视图数据功能
May 07 Javascript
Vue验证码60秒倒计时功能简单实例代码
Jun 22 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 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
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
初识Laravel
2014/10/30 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
JS打印组合功能
2016/08/04 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python动态性强类型用法实例
2015/05/09 Python
Python中 map()函数的用法详解
2018/07/10 Python
python实现随机梯度下降法
2020/03/24 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
django如何自己创建一个中间件
2019/07/24 Python
python画环形图的方法
2020/03/25 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
花卉与景观设计系大学生求职信
2013/10/01 职场文书
毕业自荐信
2013/12/16 职场文书
工程力学专业自荐信范文
2014/03/17 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
教师辞职书范文
2015/02/26 职场文书
电台广播稿范文
2015/08/19 职场文书
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript
nginx之queue的具体使用
2022/06/28 Servers