前端手写代码面试题
目录

实现一个函数 diff(oldVNode, newVNode),比较两个虚拟 DOM 节点的差异

· 约 4 分钟读完 · 第 63 / 125 章

推荐答案

本题详细解读

1. 节点类型不同

  • 如果新旧虚拟 DOM 节点的类型不同(例如一个是 div,另一个是 span),则直接返回一个 REPLACE 类型的差异对象,表示需要替换整个节点。

2. 文本节点

  • 如果新旧节点都是文本节点,并且内容不同,则返回一个 TEXT 类型的差异对象,表示需要更新文本内容。

3. 属性比较

  • 遍历新旧节点的属性,找出新增、修改或删除的属性,并返回一个 ATTR 类型的差异对象,表示需要更新属性。

4. 子节点比较

  • 递归比较新旧节点的子节点,找出子节点的差异,并返回一个 CHILDREN 类型的差异对象,表示需要更新子节点。

5. 没有变化

  • 如果新旧节点完全相同,则返回 null,表示没有变化。

通过这种方式,diff 函数可以高效地比较两个虚拟 DOM 节点的差异,并返回一个描述差异的对象,供后续的 DOM 更新操作使用。