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 相关文章推荐
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
Sep 23 Javascript
jQuery简单创建节点的方法
Sep 09 Javascript
JS不完全国际化&本地化手册 之 理论篇
Sep 27 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
JavaScript、C# URL编码、解码总结
Jan 21 Javascript
vue如何实现observer和watcher源码解析
Mar 09 Javascript
Ionic + Angular.js实现图片轮播的方法示例
May 21 Javascript
javascript实现延时显示提示框效果
Jun 01 Javascript
微信小程序 地图map实例详解
Jun 07 Javascript
ES6知识点整理之Proxy的应用实例详解
Apr 16 Javascript
Node.js学习教程之Module模块
Sep 03 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用正则表达式匹配URL的简单方法
2013/11/12 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
Javascript将string类型转换int类型
2010/12/09 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
JavaScript中string对象
2015/06/12 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
Python脚本暴力破解栅栏密码
2015/10/19 Python
python之Character string(实例讲解)
2017/09/25 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
人工神经网络算法知识点总结
2019/06/11 Python
Keras自定义IOU方式
2020/06/10 Python
python语言的优势是什么
2020/06/17 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
Redis唯一ID生成器的实现
2022/07/07 Redis