③ 实现Virtual DOM的下一个VNode节点
1 什么是VNode?
render function 会被转化成 VNode 节点
1.1 Virtual DOM
一个结构类似于真实 DOM 的 js 对象
1.2 实现一个简单的 VNode 类,加入一些基本属性
class VNode {
constructor (tag, data, children, text, elm) {
// 当前节点的标签名
this.tag = tag;
// 当前节点的一些数据信息
this.data = data;
// 当前节点的文本
this.text = text;
// 当前虚拟节点对应的真实DOM
this.elm = elm;
}
}
栗子
1. Vue组件
<template>
<span class="demo" v-show="isShow">
This is a span.
</span>
</template>
2. 用 js 代码形式表示该 Vue 组件
function render () {
return new VNode(
'span',
{
// 指令集合数组
directives: [
{
// v-show指令
rawName: 'v-show',
expression: 'isShow',
name: 'show',
value: true
}
],
// 静态class
staticClass: 'demo'
},
[new VNode(undefined, undefined, undefined, 'This is a span.')]
);
}
3. 转换成 VNode
{
tag: 'span',
data: {
// 指令集合数组
directives: [
{
rawName: 'v-show',
expression: 'isShow',
name: 'show',
value: true
}
],
// 静态class
staticClass: 'demo'
},
text: undefined,
children: [
// 子节点是一个文本VNode节点
{
tag: undefined,
data: undefined,
text: 'This is a span.',
children: undefined
}
]
}
1.3 生成常用 VNode 的方法封装
1. 创建一个空节点
function createEmpty VNode () {
const node = new VNode();
node.text = '';
return node;
}
2. 创建一个文本节点
function createTextVNode (val) {
return new VNode(undefined, undefined, undefined, String(val));
}
3. 克隆一个 VNode 节点
function cloneVNode (node) {
const cloneVnoed = new VNode(
node.tag,
node.data,
node.children,
node.text,
node.elm
);
return cloneVnode;
}
1.4 总结
VNode
就是一个js
对象,用js
对象的属性来描述当前节点的一些状态,用VNode
节点的形式模拟一棵Virtual DOM
树
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)