书接上文,我们已经知道了在 AST 转换后,会执行 generate 函数生成代码,而 generate 主要做五件事情:创建代码生成上下文,生成预设代码,生成渲染函数,生成资源声明代码,以及生成创建 VNode 树的表达式。这节课我们继续分析,来看生成创建 VNode 树的表达式的过程。
生成代码-AST如何生成可运行的代码?-上篇
本篇开始,我们就来分析整个编译的过程的最后一步——代码生成的实现原理。
AST转换-AST节点内部做了哪些转换? -下篇
上一篇文章中,我们已经知道了 transform 的核心流程主要有四步:创建 transform 上下文、遍历 AST 节点、静态提升以及创建根代码生成节点。这节课我们接着分析遍历 AST 节点中的 Text 节点的转换函数。
模板解析-构造AST的完整流程是怎样的? -下篇
这一节课我们依然要解析 template 生成 AST 背后的实现原理,之前,我们知道了baseParse 主要就做三件事情:创建解析上下文,解析子节点,创建 AST 根节点
AST转换-AST节点内部做了哪些转换?- 上篇
上一篇文章中,我们学习了 template 的解析过程,最终拿到了一个 AST 节点对象。这个对象是对模板的完整描述,但是它还不能直接拿来生成代码,因为它的语义化还不够,没有包含和编译优化的相关属性,所以还需要进一步转换。
模板解析-构造AST的完整流程是怎么样的? - 上篇
Vue.js 3.0 的编译场景分服务端 SSR 编译和 web 编译,本文我们只分析 web 的编译。
侦听器的实现原理和使用场景 - 下篇
在前面中,我们多次提到回调函数是以一种调度的方式执行的,特别是当 flush 不是 sync 时,它会把回调函数执行的任务推到一个异步队列中执行。接下来,我们就来分析异步执行队列的设计。分析之前,我们先来思考一下,为什么会需要异步队列?
响应式内部的实现原理是怎么样的?- 下篇
我们之前了解在 Vue.js 3.0 中引入 reactive API,它可以把对象数据变成响应式,所以我们着重分析 reactive API 的实现原理,并学习了收集依赖的 get 函数, 这节课我们继续来分析 reactive API 中需要关注的另一个内容——派发通知的过程。
依赖注入:子孙组件如何共享数据?
Vue.js 为我们提供了很多组件通讯的方式,常见的是父子组件通过 props 传递数据。但是有时,我们希望能跨父子组件通讯,比如,无论组件之间嵌套多少层级,我都希望在后代组件中能访问它们祖先组件的数据。
生命周期:各个生命周期的执行时机和应用场景是怎么样的?
Vue.js 组件的生命周期包括创建、更新、销毁等过程。在这些过程中也会运行叫生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。