网站首页 > 技术文章 正文
前车之鉴
有了vue-router源码学习的经验,每次看认真钻研源代码的时候都会抽出一小段时间来大体浏览一遍源代码。大体了解这个源代码的脉络,每个阶段做了什么,文件目录的划分。下面我来带大家梳理一下Vuex的脉络。
Vuex与vue-router结构的区别
Vuex的结构与vue-router结构的核心区别就在与Vuex有一大批的辅助函数需要提供、这个并不在应该Vuex这个类中,
所以Vuex的index.js只是一个出口文件,负责输出Store、install、以及所有的辅助函数。而vue-router的index.js就是router的构造函数。
我们看一下Vuex的index.js
只是一个简单的输出,回忆下我们如何使用初始化Vuex
Vue.use(Vuex) export default new Vuex.Store( { state : ..., modules : ... } ) main.js // 引入vuex实例 import store from './store' new Vue({ store })
这可以看出来Vuex的核心类(Store)就在store.js这个文件中,
接下来看一下store.js中这个核心的类Store,
这一期只是单纯的梳理脉络,所以只是看一下Store的constrctor函数
new Store的过程首先要声明一些空间用于存储mutation、action、getters等,然后关键代码
生成模块与模块链接
//完成模块之间的链接。我们要把Vuex组织成一个树形结构,如果需要的话(有module) this._modules = new ModuleCollection(options);
_modules会放置被组织好的模块们,如何组织的我们会在模块与模块链接的章节详细解释,这只需要知道,Vuex初始化的时候很早的就把模块组织链接好了。
bind dispatch与commit方法
然后对dispacth和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) }
installModule 根据根模块的state与根模块实例来递归注册所有的模块
// init root module. // this also recursively registers all sub-modules // and collects all module getters inside this._wrappedGetters installModule(this, state, [], this._modules.root)
在模块链接完毕之后可以拿到一个state,这个就是经过模块链接之后的根结点的state。
然后用根结点state和根结点模块,来初始化根结点以及递归的注册所有模块。
重置VM对象
//重置storeVM resetStoreVM(this, state)
重置一下store的vm对象,这块也是一个核心的点,会在以后章节讲述vm对象的用处以及resetStoreVM函数的作用。
注册插件
最后Vuex支持各种插件
注册一下插件。
上个图吧:
这就是Vuex最核心的Store构造函数的基本脉络,以下的章节就要一点一点的去剖析每一步了,进度变缓、难度加大。大家坐稳扶好。
猜你喜欢
- 2024-10-11 JavaScript实现的转盘抽奖html页面前端源码
- 2024-10-11 前端录屏 + 定位源码,帮你快速定位线上 bug
- 2024-10-11 css+JavaScript实现的二级导航菜单html页面前端源码
- 2024-10-11 交互问卷表单设计html页面前端源码
- 2024-10-11 web前端实战项目(免费送源码+视频)
- 2024-10-11 html5+css3做的响应式企业网站前端源码
- 2024-10-11 小程序源代码:实现一个简易版QQ的前端页面,文末有代码
- 2024-10-11 Dive Into Code: VSCode 源码阅读(一)
- 2024-10-11 web前端:vue源码解析,vue-cli父子组件传递模板
- 2024-10-11 一个月学会web前端(免费送视频+源码)
你 发表评论:
欢迎- 500℃几个Oracle空值处理函数 oracle处理null值的函数
- 494℃Oracle分析函数之Lag和Lead()使用
- 493℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 481℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 473℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 468℃【数据统计分析】详解Oracle分组函数之CUBE
- 453℃Oracle有哪些常见的函数? oracle中常用的函数
- 448℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
-
- Spring Boot跨域难题终结者:3种方案,从此告别CORS噩梦!
- 京东大佬问我,SpringBoot为什么会出现跨域问题?如何解决?
- 在 Spring Boot3 中轻松解决接口跨域访问问题
- 最常见五种跨域解决方案(常见跨域及其解决方案)
- Java Web开发中优雅应对跨域问题(java跨域问题解决办法)
- Spring Boot解决跨域最全指南:从入门到放弃?不,到根治!
- Spring Boot跨域问题终极解决方案:3种方案彻底告别CORS错误
- Spring Cloud 轻松解决跨域,别再乱用了
- Github 太狠了,居然把 "master" 干掉了
- IntelliJ IDEA 调试 Java 8,实在太香了
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)