在 React 的官网在解释 virtualDom 时,有这样一段话:

"The virtual DOM (VDOM) is a programming concept where an ideal, or “virtual”, representation of a UI is kept in memory and synced with the “real” DOM by a library such as ReactDOM. This process is called reconciliation."

Reconciliation 是实现UI更新的一个过程。这里翻译成“调和”;思考:为什么叫调和??

调和的目的

Reconciliation 的目的是在用户无感知的情况下将数据的更新体现到UI上。

触发调和过程的方式

在React 中有以下几种操作会触发调和过程:

1、ReactDom.render() 函数和 ReactNativeRenderer.render() 函数

2、setState() 函数

2、forceUpdate() 函数的调用

4、componentWillMount 和 componentWillReceiveProp 中直接修改了state(地址)

5、hooks 中的 useReducer 和 useState 返回的钩子函数

调和过程涉及的数据结构

接触 React 时,首先接触的是 virtualDom 这个词,会好奇什么是 virtualDom。开端的引文已经解释,virtualDom 只是一种编程理念,在 react 中若一定要将他与某种数据相关联,那应该是 ReactElement 和 Fiber,Fiber 更合适。

react15 在 render 阶段的 reconcile 是不可打断的,这会在进行大量节点的 reconcile 时可能产生卡顿,因为浏览器所有的时间都交给了js执行,并且 js 的执行时单线程。为此 react16 之后就有了 scheduler 进行时间片的调度,给每个 task(工作单元)一定的时间,如果在这个时间内没执行完,也要交出执行权给浏览器进行绘制和重排,所以异步可中断的更新需要一定的数据结构在内存中来保存工作单元的信息,这个数据结构就是 Fiber。

那么有了 Fiber 这种数据结构后,能完成哪些事情呢?

工作单元 任务分解 :Fiber 最重要的功能就是作为工作单元,保存原生节点或者组件节点对应信息(包括优先级),这些节点通过指针的形似形成 Fiber 树。

增量渲染:通过 jsx 对象和 current Fiber 的对比,生成最小的差异补丁,应用到真实节点上。

根据优先级暂停、继续、排列优先级:Fiber 节点上保存了优先级,能通过不同节点优先级的对比,达到任务的暂停、继续、排列优先级等能力,也为上层实现批量更新、Suspense 提供了基础保存状态:因为 Fiber 能保存状态和更新的信息,所以就能实现函数组件的状态更新,也就是 hooks。

Fiber 的数据结构,Fiber 的自带的属性如下:

//ReactFiber.old.js
function FiberNode(tag: WorkTag,pendingProps: mixed,key: null | string,mode: TypeOfMode,
) {//作为静态的数据结构 保存节点的信息 this.tag = tag;//对应组件的类型this.key = key;//key属性this.elementType = null;//元素类型this.type = null;//func或者classthis.stateNode = null;//真实dom节点//作为fiber数架构 连接成fiber树this.return = null;//指向父节点this.child = null;//指向childthis.sibling = null;//指向兄弟节点this.index = 0;this.ref = null;//用作为工作单元 来计算statethis.pendingProps = pendingProps;this.memoizedProps = null;this.updateQueue = null;this.memoizedState = null;this.dependencies = null;this.mode = mode;//effect相关this.effectTag = NoEffect;this.nextEffect = null;this.firstEffect = null;this.lastEffect = null;//优先级相关的属性this.lanes = NoLanes;this.childLanes = NoLanes;//current和workInProgress的指针this.alternate = null;
}

什么是Reconciliation?相关推荐

  1. react 返回一个页面_Fiber 内部: 深入理解 React 的新 reconciliation 算法

    最近在看 React, 发现一篇深度好文, 忍不住就翻译了. React 是一个用于构建用户界面的库, 它的核心是跟踪组件状态变化并将它们更新到页面上. 在 React 中, 我们称这个过程为 rec ...

  2. k8s kubebuilder系列开发 — 编写自定义资源和Reconciliation循环

    原文转自公众号云原生CTO 这是 Kubernetes Operator Dev N 部分系列的第三部分.在本文中,我们将深入探讨如何编写自定义资源和operator/控制器的reconciliati ...

  3. [react] react16的reconciliation和commit分别是什么?

    [react] react16的reconciliation和commit分别是什么? React 16 三个核心: Scheduler 调度器:决定什么时候调度 Reconciler Reconci ...

  4. [react] 说说你对React的reconciliation(一致化算法)的理解

    [react] 说说你对React的reconciliation(一致化算法)的理解 就是启发式Diff算法 ,时间复杂度从N的三次方下降到N ,通过博客途径了解到实现的策略是 tree diff , ...

  5. 统驭科目(Reconciliation account)

    文章目录 一.概念 1.1 注意事项 二.客户(D)统驭科目 三.供应商(K)统驭科目 一.概念 统驭科目是将明细分类账归集到总分类账的一种总账科目. 应收应付和资产相关科目一般设置成统驭科目(有分类 ...

  6. 备选统驭科目(Alternative Reconciliation Accounts)配置及实操演示

    文章目录 一.概述 二.备选统驭科目配置 三.实操演示-预收账款 四.特别总账标志+特别总账科目 一.概述 客商的每个公司视图主数据唯一分配一个统驭科目.一般情况下,客商经常发生的业务对应的总帐科目设 ...

  7. React是如何在后台运行的

    React is a very popular JavaScript library. With over 5.5 million weekly downloads, React is enjoyin ...

  8. react前端开发_是的,React正在接管前端开发。 问题是为什么。

    react前端开发 by Samer Buna 通过Samer Buna 是的,React正在接管前端开发. 问题是为什么. (Yes, React is taking over front-end ...

  9. diff算法_React源码揭秘(三):Diff算法详解

    编者按:本文作者奇舞团前端开发工程师苏畅. 代码参照React 16.13.1 什么是Diff 在前两篇文章中我们分别介绍了 React 的首屏渲染流程1和组件更新流程2,其中 首屏渲染会渲染一整棵 ...

最新文章

  1. Java 性能优化实战记录(3)--JVM OOM的分析和原因追查
  2. 7.3 TensorFlow笔记(基础篇):加载数据之从队列中读取
  3. 学习在.NET Core中使用RabbitMQ进行消息传递之持久化(二)
  4. 【活动】AI人工智能技术沙龙 |杭州站
  5. SpringMVC之@RequestMapping注解及其衍生注解详解
  6. 明年起Polkascan不再为Kulupu提供服务
  7. redis 备份导出rdb_Redis学习——Redis持久化之RDB备份方式保存数据
  8. 程序员必看—程序员如何高效提升自己?
  9. 苹果鼠标右键怎么按_UG经验技巧案例17把UG命令设置到Shift+Ctrl+鼠标的左、中、右三键及右键长、按右键的方法...
  10. 同城交友小程序项目功能方案介绍
  11. 如何下载安全绿色的代理IP软件
  12. dstwo linux 模拟器,dstwo md模拟器使用图文教程
  13. echarts使用复选框样式legend控制显隐
  14. 转:让老板头疼的90后,管不得?
  15. 好好说话之off-by-one
  16. macbook视频格式转换_一键视频格式转换器for Mac-一键视频格式转换器Mac版下载 V6.3.37-PC6苹果网...
  17. 浏览被植入木马的网站,可能也会中木马
  18. 20190829王老师发的面试题1、有一个日志文件access.log,内容如下
  19. 电容充电时间计算公式
  20. [k8s]k8s详解

热门文章

  1. 深度解析 | 用 AI 帮助听障人群,一共需要几步?
  2. 被判赔联想525万,常程方回应:提起诉讼;百度自动驾驶出租车在京全面开放;VS Code 1.50版发布|极客头条
  3. 统信 UOS 适配支持百度飞桨 AI 深度学习平台;阿里回应“马云遭印度法院传唤”;fastjson 1.2.73 发布 | 极客头条
  4. 台积电9月14日起不向华为供货;315曝光50多款App涉嫌内置SDK窃取隐私;Micronaut 1.3.7发布 | 极客头条...
  5. 知乎 Hive Metastore 实践:从 MySQL 到 TiDB
  6. Python2 圆满落幕,Python 继续辉煌! | 原力计划
  7. 对标 PyTorch,清华团队推出自研 AI 框架“计图” | AI 技术生态论
  8. 清华、北大联合调研995家中小企业,如何穿越3个月的生死火线
  9. 程序员一年稳赚50w,却被群嘲只造改bug!TA说:2020年我的愿望是........
  10. 人工智能如何改变物联网?