泽兴芝士网

一站式 IT 编程学习资源平台

Vue渲染器解析_vue的渲染函数

渲染器是 Vue 与浏览器之间的「翻译官」。它拿到一份用 JavaScript 对象描述的 UI(虚拟 DOM),然后精准地创建、更新、销毁真实 DOM,同时把响应式数据和渲染函数绑定成一条自动刷新的流水线。

一、核心职责:挂载 + 更新 + 卸载

渲染器的使命只有三句话:

  • 首次出现时把虚拟节点挂载成真实节点;
  • 数据变化时用最小代价更新节点;
  • 节点消失时把 DOM 和副作用清理干净。

所有细节都围绕这三件事展开。

二、从代码看挂载全流程

示例代码已经覆盖「元素创建、属性绑定、事件监听、子节点递归、DOM 插入」五大动作。真实 Vue 只是在此基础上加了 patchFlag、Block Tree 等优化,逻辑完全一致。

三、元素挂载处理细节问题

1. 属性到底用 setAttribute 还是 el[key]?

普通字符串属性推荐 el[key],少一次字符串解析,性能更优。布尔属性如 disabled 必须 el.disabled = false,否则 setAttribute('disabled', 'false') 会把按钮禁用。只读属性如 form 只能 setAttribute,因为 el.form 是只读。

Vue 内部用 shouldSetAsProps 函数做决策:

先判断是否有对应 DOM 属性,再决定走哪条路,确保正确性与性能兼得。

2.class 的特殊处理:字符串、对象、数组一网打尽

模板中的 :class 可能是字符串、对象或数组,渲染器先用 normalizeClass 统一成空格分隔的字符串,再一次性赋给 el.className,避免多次 DOM 操作。

3.子节点的挂载

子节点可能是文本、数组或自定义组件。

  • 文本直接 textContent
  • 数组递归 mountElement
  • 组件则执行 mountComponent,组件再返回新的虚拟节点,继续递归。

整个页面就是一颗虚拟 DOM 树 深度优先地展开成真实 DOM 树。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言