认识
2023年06月10日
一、认识
render
渲染器 的作用就是把 虚拟DOM
对象渲染为真实 DOM
元素。 render
渲染器主要工作如下:
-
创建元素: 调用原生
DOM API
, 把vnode.tag
作为标签名称来创建DOM
元素 -
为元素添加属性和事件: 遍历
vnode.props
对象, 如果key
以on
字符开头, 说明它是一个事件, 把字符on
截取掉后再用toLowerCase
函数将事件名称小写化,最终得到合法的事件名称,最后调用addEventlistener
绑定事件处理函数。 -
处理
children
: 如果children
是一个数组, 就递归调用render
继续渲染, 注意, 此时我们要把刚创建的元素作为挂载点;如果children
是字符串, 则使用createTExtNode
函数创建一个文本节点, 并将其添加到新创建的元素内。
render
基本实现如下所示:
const render = (vnode, container) => {
if (vnode == null) {
if (container._vnode) {
/**
* @description: 新 vnode 不存在 且 旧 vnode 存在, 说明是 卸载 unmount 操作
*/
container.innerHTML = '';
}
} else {
/**
* @description: 新 vnode 存在, 将其与旧 vnode 一起传递给 patch 函数
*/
patch(container._vnode, vnode, container);
}
container._vnode = vnode;
};