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 相关文章推荐
静态的动态续篇之来点XML
Aug 15 Javascript
添加JavaScript重载函数的辅助方法2
Jul 04 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
Jan 24 Javascript
全面解析标签页的切换方式
Aug 21 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
Bootstrap基本插件学习笔记之折叠(22)
Dec 08 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
Mar 17 Javascript
Express URL跳转(重定向)的实现方法
Apr 07 Javascript
浅谈super-vuex使用体验
Jun 25 Javascript
深入理解react-router 路由的实现原理
Sep 26 Javascript
微信小程序获取当前位置和城市名
Nov 13 Javascript
JS实现扫雷项目总结
May 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
jQuery ajax请求struts action实现异步刷新
Apr 19 #jQuery
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
Apr 19 #Javascript
You might like
phpMyadmin 用户权限中英对照
2010/04/02 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
js 字符串操作函数
2009/07/25 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
vue.js的提示组件
2017/03/02 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
python生成指定长度的随机数密码
2014/01/23 Python
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
Python批量启动多线程代码实例
2020/02/18 Python
python入门教程之基本算术运算符
2020/11/13 Python
银行求职推荐信范文
2013/11/30 职场文书
合同协议书格式
2014/04/18 职场文书
五年级小学生评语
2014/12/26 职场文书
中职班主任培训心得体会
2016/01/07 职场文书