Vue 的 render 函数(深入原理 + 实战)
Vue 的 render 函数深入原理 实战render 函数是 Vue 底层核心之一 ——模板的本质就是编译成 render 函数掌握它能彻底理解 Vue 视图渲染逻辑还能实现模板做不到的灵活组件。一、为什么要有 render 函数Vue 模板是「语法糖」最终会被编译器编译成 render 函数执行后生成 VNode虚拟 DOM再通过 patch 算法渲染成真实 DOM。模板适合大部分常规场景简单易上手render 函数适合动态性极高、逻辑复杂的组件如表单生成、动态标签比模板更灵活、更接近底层。二、核心概念VNode虚拟 DOM在讲 render 函数前必须先懂 VNode——用 JS 对象描述 DOM 节点的结构是 render 函数的返回值。极简 VNode 结构javascript运行const vnode {type: ‘div’, // 节点类型标签/组件/文本props: { class: ‘box’, onClick: handleClick }, // 属性/事件children: [ // 子节点{ type: ‘span’, children: ‘Hello Vue’ },h(‘button’, { onClick: () {} }, ‘点击’) // h函数创建VNode],el: null // 对应的真实DOM节点Vue内部挂载}Vue 内部通过 h() 函数hyperscript创建 VNodeh 是 createVNode 的别名。三、render 函数的基础用法最基础的 render 函数替代模板template!--模板写法--divclasscontainerclickhandleClickspan{{msg}}/spanbutton按钮/button/div/templatescript// render 函数等价写法exportdefault{data(){return{msg:Hello Render}},methods:{handleClick(){console.log(点击容器)}},render(h){// h是createVNode的参数Vue自动传入// h(标签/组件, 属性/事件, 子节点)returnh(div,{class:container,onClick:this.handleClick},[h(span,this.msg),// 文本子节点h(button,按钮)// 按钮子节点])}}/scriptVue 3 中的 render 函数Composition APIVue 3 中需手动导入 h 函数且 setup 函数返回的就是 render 逻辑script setupimport{h}fromvueconstmsgVue 3 Render// setup返回render函数return()h(div,{class:container},[h(span,msg),h(button,{onClick:()alert(点击)},Vue3按钮)])/script核心参数说明h 函数h(type, props, children)四、render 函数的高级场景模板做不到的事// 场景 1动态标签根据参数生成不同标签// 比如封装一个「通用文本组件」支持 level 参数控制是 h1/h2/h3scriptexportdefault{props:{level:{type:Number,default:1,validator:vv1v6},content:{type:String,required:true}},render(h){// 动态生成标签h1/h2/h3...returnh(h${this.level},{class:title},this.content)}}/script!--使用--templatemy-title level3content这是H3标题/my-title/template// 场景 2动态组件 作用域插槽// render 函数能更灵活地处理插槽尤其是作用域插槽scriptexportdefault{props:{list:{type:Array,default:()[]}},render(h){returnh(ul,this.list.map(item// 作用域插槽向插槽传递item数据h(li,this.$scopedSlots.default?this.$scopedSlots.default({item}):item.name)))}}/script!--使用--templatemy-list:list[{name: Vue}, {name: React}]template #defaultscopespan{{scope.item.name}}/span/template/my-list/template// 场景 3递归组件树形结构// render 函数实现递归组件如树形菜单比模板更简洁scriptexportdefault{name:Tree,// 必须命名用于递归调用props:{data:{type:Object,required:true}},render(h){constchildrenthis.data.childrenthis.data.children.length?this.data.children.map(childh(Tree,{props:{data:child}}))// 递归:[]returnh(div,[h(span,this.data.label),h(div,{class:children},children)])}}/script五、模板 vs render 函数 核心区别六、render 函数的底层执行流程1.组件挂载时Vue 执行 render 函数 → 返回 VNode 树2.Vue 调用 patch 方法将 VNode 转换为真实 DOM挂载到 el 上3.数据更新时重新执行 render 函数 → 生成新 VNode 树4.Vue 对比新旧 VNodediff 算法→ 只更新变化的 DOM 节点。七、关键注意事项1.避免直接操作 DOMrender 函数返回的是 VNodeVue 会自动处理 DOM 挂载不要在 render 中操作 el2.事件命名props 中事件需用小驼峰onClick而非模板中的短横线click3.Vue 3 兼容Vue 3 移除了 $createElement需手动导入 h 函数4.性能优化复杂 render 函数中可通过 memo 缓存 VNode避免重复渲染。总结1.render 函数是 Vue 模板的底层实现返回 VNode 描述视图结构2.h() 函数是创建 VNode 的核心参数为「类型、属性、子节点」3.模板适合常规场景render 函数适合动态性高、逻辑复杂的组件4.掌握 render 函数能理解 Vue 视图渲染的本质也是阅读 Vue 源码的基础。

相关新闻

Flutter 组件 jt_preferences 适配鸿蒙 HarmonyOS 实战:高性能持久化配置治理,构建偏好项资产与全场景状态一致性治理架构

Flutter 组件 jt_preferences 适配鸿蒙 HarmonyOS 实战:高性能持久化配置治理,构建偏好项资产与全场景状态一致性治理架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 组件 jt_preferences 适配鸿蒙 HarmonyOS 实战:高性能持久化配置治理,构建偏好项资产与全场景状态一致性治理架构 前言 在鸿蒙(OpenHarmony&am…

2026/7/7 6:08:06 阅读更多 →
vue3,单页应用学习笔记

vue3,单页应用学习笔记

解释一下meta标签的作用在这段 HTML 代码里&#xff0c;有两个 <meta> 标签&#xff0c;它们的作用分别是&#xff1a;1. <meta charset"utf-8">作用&#xff1a;指定网页的字符编码为 UTF-8。这是最常用的字符编码&#xff0c;几乎支持所有语言的字符&a…

2026/5/17 7:03:58 阅读更多 →
《相关研究》001

《相关研究》001

2026-03-09 无需Tokenizer&#xff0c;去掉VAE纯Transformer预测数据比预测噪声更高效 VLM方向 核心贡献 在于重新审视了扩散模型的基础假设&#xff0c;通过回归"去噪"的本质&#xff08;直接预测干净数据&#xff09;&#xff0c;提出了一种极简但高效的生成范式…

2026/5/17 7:16:23 阅读更多 →

最新新闻

本地部署AI图像与视频生成:从环境配置到实战应用指南

本地部署AI图像与视频生成:从环境配置到实战应用指南

&#x1f680; 30款热门AI模型一站整合&#xff0c;DeepSeek/GLM/Qwen 随心用&#xff0c;限时 5 折。 &#x1f449; 点击领海量免费额度 1. 先搞清楚这个工具到底解决什么问题 看到“最强”“吊打”“炸裂”这类词&#xff0c;先别急着兴奋。这类工具的核心价值&#xff…

2026/7/7 9:32:31 阅读更多 →
考霸刷题宝:五年级的暑假冲刺抢跑,决定了孩子小升初的起跑线

考霸刷题宝:五年级的暑假冲刺抢跑,决定了孩子小升初的起跑线

考霸刷题宝&#xff1a;五年级的暑假冲刺抢跑&#xff0c;决定了孩子小升初的起跑线五年级期末考刚结束&#xff0c;不少家长松了一口气——“终于放假了&#xff0c;让孩子好好玩一玩。”但你知道吗&#xff1f;五年级这个暑假&#xff0c;恰恰是小学阶段最不能“躺平”的一个…

2026/7/7 9:32:31 阅读更多 →
想要学习deepseekGEO技术?深圳这些优质靠谱课程值得打算入行的你了解

想要学习deepseekGEO技术?深圳这些优质靠谱课程值得打算入行的你了解

最近刷到好多人问&#xff0c;想入行deepseekGEO&#xff08;大模型地理空间智能&#xff09;&#xff0c;深圳有没有靠谱的课程&#xff1f;说实话我听完挺感慨的&#xff1a;这个技术确实是当下风口&#xff0c;不管是做农业溯源、本地生活服务还是供应链调货&#xff0c;都能…

2026/7/7 9:30:31 阅读更多 →
如何免费解锁Microsoft 365完整功能:Ohook开源解决方案终极指南

如何免费解锁Microsoft 365完整功能:Ohook开源解决方案终极指南

如何免费解锁Microsoft 365完整功能&#xff1a;Ohook开源解决方案终极指南 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh_mirrors/…

2026/7/7 9:28:31 阅读更多 →
DistroAV技术解析:构建基于NDI协议的OBS Studio网络音视频生态系统

DistroAV技术解析:构建基于NDI协议的OBS Studio网络音视频生态系统

DistroAV技术解析&#xff1a;构建基于NDI协议的OBS Studio网络音视频生态系统 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 在当前的直播制作和内容创作领域&#xff…

2026/7/7 9:28:31 阅读更多 →
网易云音乐NCM格式终极解密指南:如何用ncmdump轻松转换加密音乐文件

网易云音乐NCM格式终极解密指南:如何用ncmdump轻松转换加密音乐文件

网易云音乐NCM格式终极解密指南&#xff1a;如何用ncmdump轻松转换加密音乐文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾在网易云音乐下载了心爱的歌曲&#xff0c;却发现在其他播放器或设备上无法播放&#xff1f;那…

2026/7/7 9:24:30 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集&#xff0c;从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高&#xff1a;流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广&#xff0c;是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队&#xff0c;往往容易卡在一容易踩坑的选型难题&#xff1a; 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定&#xff0c;必须同时依赖「文本语义理解 实体关系推理」时&#xff0c;到底是做「向量图谱混合检索」就够了&#xff0c;还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻