网易首页 > 网易号 > 正文 申请入驻

React把4个函数藏了10年,开发者自己写了一遍才懵

0
分享至


2013年React开源时,没人想到这个库的"心脏"只有4个函数。10年后,仍有开发者花3小时写了一遍,才发现自己用了8年的框架,底层竟如此朴素。

这4个函数是:h、render、diff、patch。它们构成了虚拟DOM(Virtual DOM)的完整生命周期——创建节点、挂载到真实DOM、对比差异、应用最小变更。没有类、没有事件总线、没有响应式系统。100行原生JavaScript,零依赖,浏览器直接运行。

为什么虚拟DOM不是性能优化

Svelte作者Rich Harris在2018年提出过一个反直觉观点:虚拟DOM不会让DOM操作更快,反而增加了一层计算开销。这句话至今成立。

虚拟DOM的真正价值是编程模型。你描述UI应该长什么样,框架算出最小变更路径。不用手动操作DOM节点,不用追踪状态变化的具体影响范围。这种"声明式"写法降低了心智负担,代价是多一次内存中的树形对比。

React团队从未隐瞒这一点。但大多数开发者停留在"虚拟DOM快"的模糊认知,直到性能分析工具里出现看不懂的火焰图,或者遇到 reconciliation(协调算法)相关的诡异bug,才意识到模型里有黑洞。

自己实现一遍,是填补黑洞最快的方式。

4个函数的极简实现

先看最终API设计——这是写代码前的"骨架":


// 创建虚拟节点 const vdom1 = h('div', { id: 'app' }, h('p', {}, 'Count: 0') );

// 挂载到真实DOM const container = render(vdom1); document.body.appendChild(container);

// 状态变化后,生成新树 const vdom2 = h('div', { id: 'app' }, h('p', {}, 'Count: 1') );

// 计算差异 const patches = diff(vdom1, vdom2);

// 只应用变更 patch(container, patches); // 结果:只有文本节点从"0"变成"1",div和p完全不动

h函数返回一个纯JavaScript对象,没有原型链污染,没有框架魔法:

const vnode = { type: 'p', props: {}, children: [{ type: 'TEXT_NODE', props: { nodeValue: 'Count: 0' } }] };

这个结构完全镜像DOM树,但活在内存里。真实DOM对它一无所知,直到render()遍历树并创建实际元素。

render:从描述到实体


render函数的工作是"物化"——把内存中的描述变成浏览器能画的节点。递归遍历vnode树,遇到元素类型就createElement,遇到文本类型就createTextNode,props变成setAttribute调用。

这一步没有 diff 的聪明,只有机械的创建。但它是整个系统的锚点:虚拟DOM再抽象,最终必须落地到真实DOM才能被用户看见。

diff:两棵树的对比游戏

diff是核心算法,也是React源码中最难啃的部分。但最小实现可以极度简化:只比较同层节点,类型不同直接替换,类型相同对比props和children。

这种"暴力"策略在真实React中被优化——key属性帮助识别移动节点,启发式算法假设用户不会疯狂重排列表。但100行版本不需要这些,它证明一个观点:即使最朴素的diff,也能让声明式UI跑起来。

diff的输出是一组"补丁"(patches),描述要对真实DOM做什么:替换节点、删除子树、更新文本、修改属性。patch函数按顺序执行这些操作,完成UI更新。

写完之后,React变轻了

完成这100行代码的开发者,反馈出奇一致:React的文档突然好懂了。之前模糊的"协调""批量更新""时间切片",现在有了具体的锚点——它们是对这4个函数的工程优化,而非黑魔法。

有个细节值得玩味:React 18的并发特性(Concurrent Features)本质上是在render和patch之间插入"可中断"的调度点。理解基础实现后,高级特性的设计动机变得透明——不是炫技,是在保活编程模型的前提下,解决长任务阻塞主线程的问题。

10年前,React用这4个函数说服了前端社区:声明式UI值得追求。10年后,你自己写一遍,会重新评估这个承诺的分量——它确实降低了日常开发的心智负担,但也把复杂性转移到了框架内部,转移到了那些你曾以为是"性能优化"的抽象层。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
王宝强和女友开京牌大G到青岛,冯清人高马大,衬得宝强像小娇夫

王宝强和女友开京牌大G到青岛,冯清人高马大,衬得宝强像小娇夫

八怪娱
2026-04-07 15:02:12
前无古人、后难有来者!约基奇即将创造疯狂的NBA历史

前无古人、后难有来者!约基奇即将创造疯狂的NBA历史

夜白侃球
2026-04-09 10:49:01
美伊刚要握手言和,阿联酋反手就炸伊朗炼油厂,50年血债该清算了

美伊刚要握手言和,阿联酋反手就炸伊朗炼油厂,50年血债该清算了

舍长阿爷谈事
2026-04-10 03:00:43
突发!实控人巨额减持!

突发!实控人巨额减持!

新浪财经
2026-04-10 02:11:33
打中了!伊朗今天太猛了!

打中了!伊朗今天太猛了!

财经要参
2026-04-05 23:06:21
张雪夸同行豪爵踏板,豪爵老板回应:当时我就震惊了!

张雪夸同行豪爵踏板,豪爵老板回应:当时我就震惊了!

童叔不飙车
2026-04-09 20:43:06
男子自驾游至海南遇美女搭车,同行三天后,他才知道自己逃过死劫

男子自驾游至海南遇美女搭车,同行三天后,他才知道自己逃过死劫

林林故事揭秘
2025-04-10 14:49:38
山西阳泉一佳人太漂亮了,五官精致, 身高170,美得让人移不开眼

山西阳泉一佳人太漂亮了,五官精致, 身高170,美得让人移不开眼

陈意小可爱
2026-04-10 04:10:08
消息称雅迪强制OTA致大量车辆锁死,官方回应

消息称雅迪强制OTA致大量车辆锁死,官方回应

DoNews
2026-04-08 18:52:07
4月9日俄乌最新:西方联盟的死亡证明

4月9日俄乌最新:西方联盟的死亡证明

西楼饮月
2026-04-09 21:14:13
梁靖崑刚获得世乒赛名额,松岛辉空放出话夺冠,压力给楚钦+诗栋

梁靖崑刚获得世乒赛名额,松岛辉空放出话夺冠,压力给楚钦+诗栋

越岭寻踪
2026-04-09 04:20:38
国家发改委重磅发布2026第41号令!未取得并网意见书即并网,属重大隐患

国家发改委重磅发布2026第41号令!未取得并网意见书即并网,属重大隐患

新浪财经
2026-04-09 17:14:39
风向变了,抵达大陆第三天,郑丽文获意外收获,赖清德底牌被揭

风向变了,抵达大陆第三天,郑丽文获意外收获,赖清德底牌被揭

混沌录
2026-04-09 22:18:11
纳斯达克中国金龙指数跌幅扩大,现跌1.0%,最新报6806.29点

纳斯达克中国金龙指数跌幅扩大,现跌1.0%,最新报6806.29点

每日经济新闻
2026-04-09 22:03:35
王毅突访朝鲜,不是礼节访问,是关键时刻的一次战略落子

王毅突访朝鲜,不是礼节访问,是关键时刻的一次战略落子

生活魔术专家
2026-04-09 13:01:50
深夜!天津二人在坟地做这事被抓!

深夜!天津二人在坟地做这事被抓!

天津族
2026-04-09 17:45:50
你最接近生理极限的一次经历是什么?网友分享让人目瞪口呆!

你最接近生理极限的一次经历是什么?网友分享让人目瞪口呆!

夜深爱杂谈
2026-04-09 19:39:13
高圆圆的脚是我见过最漂亮的脚丫子。

高圆圆的脚是我见过最漂亮的脚丫子。

别人都叫我阿螫
2026-04-09 17:29:15
5月1日开始,高速收费新规正式调整!

5月1日开始,高速收费新规正式调整!

老范谈史
2026-04-10 00:02:08
长公主被家暴流产了

长公主被家暴流产了

毒舌扒姨太
2026-04-08 22:29:19
2026-04-10 05:00:49
爬虫饲养员
爬虫饲养员
业余养了只叫“龙虾”的AI爬虫,主业是给互联网打工。
1009文章数 10关注度
往期回顾 全部

科技要闻

Meta凌晨首发闭源大模型 扎克伯格又行了?

头条要闻

以色列总理:同意与黎巴嫩直接谈判

头条要闻

以色列总理:同意与黎巴嫩直接谈判

体育要闻

8万人面前心脏骤停 现在他还站在球场上

娱乐要闻

金莎官宣结婚 与老公孙丞潇相差18岁

财经要闻

停火又悬了,最糟糕的情况要来了?

汽车要闻

文飞掌舵,给神行者带来了什么?

态度原创

亲子
艺术
健康
游戏
公开课

亲子要闻

五个月的宝宝必须学温伯格的宇宙学才不哭

艺术要闻

战乱中赶工?阿联酋首个赌场度假村‌,明年建成!

干细胞抗衰4大误区,90%的人都中招

Xbox手柄重大失误!微软补偿方案出炉堪称豪华

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版