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 相关文章推荐
JavaScript 变量命名规则
Sep 23 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
JavaScript通过prototype给对象定义属性用法实例
Mar 23 Javascript
深入分析jsonp协议原理
Sep 26 Javascript
json格式的javascript对象用法分析
Jul 04 Javascript
VueJs使用Amaze ui调整列表和内容页面
Nov 30 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 Javascript
vue拖拽组件使用方法详解
Dec 01 Javascript
Node.js console控制台简单用法分析
Jan 04 Javascript
微信小程序中如何使用flyio封装网络请求
Jul 03 Javascript
countup.js实现数字动态叠加效果
Oct 17 Javascript
浅谈小程序globalData的那些事儿
Nov 01 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
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
javascript事件问题
2009/09/05 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
Django小白教程之Django用户注册与登录
2016/04/22 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
python 整数越界问题详解
2019/06/27 Python
简单了解python数组的基本操作
2019/11/26 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
jupyter 添加不同内核的操作
2021/02/06 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
校园创业策划书
2014/01/14 职场文书
小学教师国培感言
2014/02/08 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
医学专业大学生求职信
2014/07/12 职场文书
大学生学习计划书
2014/09/15 职场文书
任命书标准格式
2015/03/02 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
服务行业标语口号
2015/12/26 职场文书
反邪教教育心得体会
2016/01/15 职场文书
Javascript webpack动态import
2022/04/19 Javascript
MySQL 字符集 character
2022/05/04 MySQL