跟着源码学习VUE之上手

边缘计算
• 阅读 1478

跟着源码学习VUE之上手

流程

这边的代码流程不细讲。网上有人讲的很细了。想细致了解的推荐阅读
VUE2.1.7源码学习
这里面已经讲解的很细致了。
需要注意的是 我看的 2.5.17版本中有些变动
在 init.js 中 initRender方法放到了initState前面执行。
跟着源码学习VUE之上手
这边的讲解也有点问题。具体问题看下面

梳理

这边的流程我们可以分为两大部分

准备构造函数Vue.

构造函数Vue是个很简单的函数

// instance/index.js
function Vue (options) {
  // ... 省略环境判断代码
  this._init(options)
}
initMixin(Vue)
stateMixin(Vue)
eventsMixin(Vue)
lifecycleMixin(Vue)
renderMixin(Vue)

它本身(ownProperty)不具备任何属性和方法。

构建好之后通过五个Mixin在Vue原型链上添加一系列方法。而这些方法Vue的实例是公用的。
跟着源码学习VUE之上手

因为构造函数本身也是对象,可以给这个对象定义属性。因此在initGlobalAPI中给Vue添加了全局API。
跟着源码学习VUE之上手
常用的Vue.use, Vue.extend都可以在这边找到。

实例化对象

构造函数准备好之后就实例化对象。就像上面说的,Vue本身很简单。

function Vue (options) {
  // ... 省略环境判断代码
  this._init(options)
}

当我们 new Vue()时,也是经历了这几步

  1. Object.create()。 创建一个新的plainObject.
  2. 关联原型链。
  3. 指定上下文。即this为第一步实例化出来的空对象。
  4. 执行构造函数。

可以看到,其实第三步时我们就已经拿到了实例对象(即大名鼎鼎的this)。
第四步,执行构造函数其实就是执行this._init。这边的_init是准备构造函数时通过initMixin添加到原型链上的。因此可以直接拿到。

最重要的加载流程

其实对于我们使用Vue来说,最关心的也还是这边。这边代码主要在instance/init.js中。其实我感觉这边也可以分成两部分。
跟着源码学习VUE之上手

在$mount之前都是给实例化对象添加属性和方法。然后执行$mount方法。
这也是我说上面的说法不对的地方。

跟着源码学习VUE之上手

对于initRender来说。她并没说构建DOM,虚拟DOM也没有。只是给this添加了render时会用到的方法。

跟着源码学习VUE之上手

比如最主要的creatElement等。因此哪怕created不能操作DOM与initRender位置无关。
最后执行mount才会真正生成虚拟DOM。obsever date.计算computed等一系列操作。

挂载

接着我们大概看一下挂载操作都做了什么。
你可能会很奇怪,上面列出来的方法里并没有$Mount。这是因为上面列的是从runtime/index.js里导出的Vue。而真正是用的Vue函数式经过entry-runtime-with-compiler.js包装过的。这里就定义了原型链上的$mount方法。

这段代码其实就是做了一件事,如果看看有没有render方法,如果没有,则根据template生成对应的render方法,并保存在options中。

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
WeiSha100 WeiSha100
3年前
学习刷题培训系统源代码
这是一套完整的学习刷题培训系统源码,经过测试,源码开放,可二次开发,有在线学习,刷题,参与考试,后台学习记录可追踪,可打印学习证明,比较好上手,分享给需要的朋友,需要的话可以下载研究。整体的功能比较完善,做一个线上学习系统来说足够用了1、在线学习:可上传视频,图文资料,习题2、在线直播:可以屏幕共享,电子白板,文字交流,在线培训3、刷题:有可批量管理上传的题
爱丽丝13 爱丽丝13
4年前
新手学习 React 迷惑的点
网上各种言论说React上手比Vue难,可能难就难不能深刻理解JSX,或者对ES6的一些特性理解得不够深刻,导致觉得有些点难以理解,然后说React比较难上手,还反人类啥的,所以我打算写两篇文章来讲新手学习React的时候容易迷惑的点写出来,如果你还以其他的对于学习React很迷惑的点,可以在留言区里给我留言。为什么要引入Reac
Wesley13 Wesley13
3年前
Ubuntu采用源码安装mysql出现没有PID文件问题
最近学习mysql,想深入了解mysql的各种性能优化方面的知识,以便进军DBA,但是在用源码安装mysql的时候一直出错,跟着网上的方法一步一步还是有问题:StartingMySQL.\TheserverquitwithoutupdatingPIDfile(/usr/local/mysql/data/deanG41MTS2
Wesley13 Wesley13
3年前
Java并发包源码学习:CLH同步队列及同步资源获取与释放
本篇学习目标回顾CLH同步队列的结构。学习独占式资源获取和释放的流程。CLH队列的结构我在Java并发包源码学习系列:AbstractQueuedSynchronizer同步队列与Node节点已经粗略地介绍了一下CLH的结构,本篇主要解析该同步队列的相关操作,因此在这边再回顾一下:AQS通过
Wesley13 Wesley13
3年前
Java从无知到入门书籍推荐
0前言本文主题为JavaWeb书籍推荐1零基础学习此处的零基础,指的是不懂或只懂ifelse之类基本代码流程。初次接触,建议淘宝买一套\\培训机构录播课程,看入门段视频。一是学习之初培养良好的习惯,正确认识面向对象、软件开发;二是有老师带着可以尽快上手,比自己单看效率要高。2入门入门阶段书籍皆较简单,建议跟书上代码,速度敲
Stella981 Stella981
3年前
ABP框架源码学习之修改默认数据库表前缀或表名称
ABP框架源码学习之修改默认数据库表前缀或表名称1,源码1namespaceAbp.Zero.EntityFramework2{3///<summary4///Extensionmethodsfor<see
Easter79 Easter79
3年前
Spring源码学习(四)在单值注入时如何按类型查找匹配的Bean
这是我学习Spring源码之后的第四篇文章,如果你想了解,之前的3篇文章请您查阅:前3篇blog的地址:1.Spring源码学习()别怕,老外点中餐与AbstractBeanFactory.getBean的主流程差不多(https://my.oschina.net/floor/blog/3106015)2.Spring源码学习
0源码基础学习Spring源码系列(一)——Bean注入流程
通过本文,读者可以0源码基础的初步学习spring源码,并能够举一反三从此进入源码世界的大米!由于是第一次阅读源码,文章之中难免存在一些问题,还望包涵指正!