React-diff算法

React 渲染流程

  • 执行 render 方法
<div>
    <div><p>我是段落</p></div>
    <div><span>我是span</span></div>
</div>
  • JSX 转换成 createElement
React.createElement("div", null,
    React.createElement("div", null,
        React.createElement("p", null, "我是段落")),
    React.createElement("div", null,
        React.createElement("span", null, "我是span"))
);
  • 执行 createElement 创建虚拟 DOM, 得到虚拟 DOM 树
{
 targetName: 'div',
 children:[
    {
     targetName: 'div',
     children:[
        {
         targetName: 'p'
        }
     ]
    },
    {
     targetName: 'div',
     children:[
        {
         targetName: 'span'
        }
     ]
    }
 ]
}
  • 根据虚拟 DOM 树在界面上生成真实 DOM

React 更新流程

  • props/state 发生改变
  • render 方法重新执行
  • JSX 转换成 createElement
  • 利用 createElement 重新生成新的虚拟 DOM 树
  • 新旧虚拟 DOM 通过 diff 算法 进行比较
  • 每发现一个不同就生成一个 mutation
  • 根据 mutation 更新真实 DOM

React-Diff 算法

  • 只会比较同层元素
  • 只会比较 同位置 元素(默认)

在比较过程中:

  • 同类型元素做修改
  • 不同类型元素重新创建

官方文档:https://zh-hans.reactjs.org/docs/reconciliation.html#the-diffing-algorithm

image-20220430180939085

posted @   BNTang  阅读(27)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示