
渲染器
作用:虚拟DOM转成真实DOM。
工作原理:递归地遍历虚拟DOM,调用原生js创建真实的DOM。
虚拟DOM
虚拟DOM就是一个用来描述真实DOM的JS对象。
1 | const vnode = { |
组件
虚拟DOM元素的封装,可以是返回虚拟DOM的函数,也可以是一个对象(这个对象必须有一个函数用来产出组件要渲染的虚拟DOM)
1 | const myComponent = function() { |
实现一个渲染器
1 | // 假设一个虚拟dom |
响应式数据
实现原理:对数据的“读取”和“设置”操作的拦截,在副作用函数和响应式数据间建立联系。当“读取”时,把当前执行的副作用函数放入“桶”;当“设置”时,把副作用函数取出并执行。
Proxy
可以创建一个代理对象,能够实现对其他对象的代理。
1 | const n = new Proxy(obj, { |
实现简单的响应式数据
1 | // 数据 |
computed
计算属性实际上是一个懒执行的副作用函数
watch
实现原理:利用副作用函数重新执行时的可调度性
编译器
作用:将模板字符串编译成渲染函数。
render 函数是模板编译后的产物,它负责构建 VNode 树,构建好的 VNode 会传递给 patch,patch 根据 VNode 的关系生成真实dom节点树。
编译器过程:
- 用来将模板字符串解析为模板AST的解析器(parser)
- 用来将模板AST转换为JavaScript AST的转换器(transformer)
- 根据JavaScript AST生成render函数代码的生成器(generator)
实现一个编译器
1 | const template = `<p>{{ message }}</p>` |


