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 相关文章推荐
学习ExtJS TextField常用方法
Oct 07 Javascript
JSQL 批量图片切换的实现代码
May 05 Javascript
jquery实现的一个导航滚动效果具体代码
May 27 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
Nov 28 Javascript
js正则表达式中test,exec,match方法的区别说明
Jan 29 Javascript
js数组依据下标删除元素
Apr 14 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
Sep 17 Javascript
详解前端自动化工具gulp自动添加版本号
Dec 20 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
简单了解Vue + ElementUI后台管理模板
Apr 07 Javascript
如何利用JS将手机号中间四位变成*号
Sep 29 Javascript
vue created钩子函数与mounted钩子函数的用法区别
Nov 05 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
各种战术和打法的原创者
2020/03/04 星际争霸
PHP 第二节 数据类型之数组
2012/04/28 PHP
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
2014/06/16 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
python切换hosts文件代码示例
2013/12/31 Python
Linux下编译安装MySQL-Python教程
2015/02/02 Python
TensorFlow Session会话控制&Variable变量详解
2018/07/30 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
python数组循环处理方法
2019/08/26 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
几个MySql的面试题
2013/04/22 面试题
环境工程专业毕业生求职信
2014/09/30 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers