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学习阶段性总结(2)--(X)HTML学习
Feb 03 Javascript
借用Google的Javascript API Loader来加速你的网站
Jan 28 Javascript
Riot.js 快速的JavaScript单元测试框架
Nov 09 Javascript
js 事件截取enter按键页面提交事件示例代码
Mar 04 Javascript
教你如何使用PHP输出中文JSON字符串
May 22 Javascript
高效的jquery数字滚动特效
Dec 17 Javascript
javascript中href和replace的比较(详解)
Nov 25 Javascript
javascript实现文字无缝滚动效果
Aug 26 Javascript
利用Three.js如何实现阴影效果实例代码
Sep 26 Javascript
layui框架table 数据表格的方法级渲染详解
Aug 19 Javascript
Nuxt升级2.0.0时出现的问题(小结)
Oct 08 Javascript
vue route新窗口跳转页面并且携带与接收参数
Apr 10 Vue.js
微信小程序 判断手机号的实现代码
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
实用函数2
2007/11/08 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
中止javascript执行的方法
2014/02/14 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
Bootstrap选项卡与Masonry插件的完美结合
2016/07/06 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
vue数据双向绑定原理解析(get & set)
2017/03/08 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
java直接调用python脚本的例子
2014/02/16 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
php优化查询foreach代码实例讲解
2021/03/24 PHP
《问银河》教学反思
2014/02/19 职场文书
护理中职生求职信范文
2014/02/24 职场文书
电子工程专业毕业生求职信
2014/03/14 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
合理化建议书
2015/02/04 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
深入理解python协程
2021/06/15 Python