vue 3 推荐使用 template 而非手写 render 函数,核心原因是模板经编译器生成带静态标记、补丁标志和依赖追踪的优化渲染函数,兼具性能、类型安全、可维护性与开发体验优势。

Vue 3 推荐使用模板(template)而非手动编写 render 函数,核心原因不是“不能用 render”,而是模板经由 Vue 编译器(Compiler)处理后,能自动生成高度优化的渲染函数,在可维护性、开发效率、性能和类型安全上形成系统性优势。下面从几个关键维度深度解析:
模板背后是智能编译器,不是“语法糖”那么简单
Vue 3 的模板并非简单转成 h() 调用的字符串拼接。它经过 @vue/compiler-dom 编译,生成的是带有静态标记、补丁标志、依赖追踪提示的高效渲染函数。例如:
- 静态节点(如
<div class="logo">Vue</div>)被标记为hoistStatic,只创建一次,后续 diff 完全跳过; - 动态绑定被精确分类(
PatchFlag),比如class变化走PATCH_FLAG.CLASS分支,避免全量比对; - 模板中
v-if/v-for的结构信息直接映射为带block特性的动态节点树,支持更细粒度的更新。
这层优化是手写 render 函数无法自动获得的——你得自己判断哪些该缓存、哪些要加 key、哪些 props 可以跳过 patch,稍有疏忽就失去响应式或触发冗余重绘。
类型推导与 IDE 支持依赖模板 AST
Vue 3 + TypeScript 的精准类型推导(如 props 类型、emit 事件签名、插槽结构)严重依赖编译器对模板的静态分析。

