新疆都市报 > 科技 > 智能 >

源码学习:实现 Virtual DOM下的一个VNode节点,本

发布时间:2019-03-25 12:24来源: 未知

问题:实现 Virtual DOM 下的一个 VNode 节点

什么是VNode

实现一个VNode什么是VNode

我们知道,render function 会被转化成 VNode 节点。Virtual DOM 其实就是一棵以 JavaScript 对象(VNode 节点)作为基础的树,用对象属性来描述节点,实际上它只是一层对真实 DOM 的抽象。最终可以通过一系列操作使这棵树映射到真实环境上。由于 Virtual DOM 是以 JavaScript 对象为基础而不依赖真实平台环境,所以使它具有了跨平台的能力,比如说浏览器平台、Weex、Node 等。.实现一个VNode

VNode 归根结底就是一个 JavaScript 对象,只要这个类的一些属性可以正确直观地描述清楚当前节点的信息即可。我们来实现一个简单的 VNode 类,加入一些基本属性,为了便于理解,我们先不考虑复杂的情况。

比如我目前有这么一个 Vue 组件。

用 JavaScript 代码形式就是这样的。

看看转换成 VNode 以后的情况。

然后我们可以将 VNode 进一步封装一下,可以实现一些产生常用 VNode 的方法。创建一个空节点function createEmptyVNode () {

const node = new VNode();

node.text = '';

return node;

}

创建一个文本节点function createTextVNode (val) {

return new VNode(undefined, undefined, undefined, String(val));

}

克隆一个 VNode 节点function cloneVNode (node) {

const cloneVnode = new VNode(

node.tag,

node.data,

node.children,

node.text,

node.elm

);

return cloneVnode;

}

总的来说,VNode 就是一个 JavaScript 对象,用 JavaScript 对象的属性来描述当前节点的一些状态,用 VNode 节点的形式来模拟一棵 Virtual DOM 树。