Fiber Node的数据结构,以及如何在Reconciliation阶段被使用。

时间:2024-01-10 01:06:42 标签:  React  数据结构  javascript  前端  

首先,Fiber Node是React用来描述组件树的数据结构,每一个React组件都对应一个Fiber Node。下面是一个Fiber Node的基本结构:

const fiber = {
  // 标识这个Fiber Node的类型(函数组件,类组件,DOM节点类型等)
  type: null,

  // 对应的React元素
  element: null,

  // 父级Fiber Node
  return: null,

  // 子级Fiber Node
  child: null,

  // 兄弟Fiber Node
  sibling: null,

  // Fiber Node对应的DOM节点或者组件实例
  stateNode: null,

  // Fiber Node的props
  pendingProps: null,

  // 保存旧的props,用于比较
  memoizedProps: null,

  // 保存旧的state,用于比较
  memoizedState: null,

  // 保存此Fiber Node上的更新
  updateQueue: null,

  // 标识Fiber Node的状态(需要更新,需要删除等)
  effectTag: null,

  // 保存副作用(需要被commit的更改)
  nextEffect: null,

  // 其他的字段...
};

在Reconciliation阶段,React会遍历Fiber Node构成的Fiber树,比较新旧props和state,然后决定是否需要更新。可以通过以下伪代码来理解这个过程:

function beginWork(currentFiber, nextProps) {
  // 比较新旧props
  if (currentFiber.memoizedProps !== nextProps) {
    // 如果props有变化,标记这个Fiber Node需要更新
    currentFiber.effectTag = 'UPDATE';
  }

  // 处理子Fiber Node
  reconcileChildren(currentFiber, currentFiber.pendingProps.children);
}

function reconcileChildren(currentFiber, nextChildrenElements) {
  // 这里省略了创建和更新Fiber Node的代码
  // 在实际的源码中,React会比较新旧children,
  // 然后决定是否需要创建新的Fiber Node,或者复用旧的Fiber Node
}

注意:以上代码只是为了解释React Fiber的工作原理,实际上React Fiber的源码中处理Fiber Node和Reconciliation的逻辑要复杂得多。

来源:https://blоg.сsdn.nеt/wеixin_44738632/аrtiсlе/dеtаils/135207461

智能推荐

  本文介绍植被冠层参数计算软件CAN-EYE的具体使用方法。  在文章下载、安装CAN-EYE植被参数工具中,我们介绍了CAN-EYE软件的下载、安装方法;本文就对该软件的具体使用方法进行介绍。  CAN-EYE软件计算LAI、FVC等各类植被参数,都需要基于相机所拍摄的真彩色或黑白植被图片。其可处理的植被照片分别有三种类型:第一类是由鱼眼镜头相机获取的数字半球照片(Digital H

标签:植被  如何用  参数  数据  EYE  

原理很简单,利用对象引用特性。科普一下知识点:浅拷贝: 浅拷贝又称为浅复制,浅克隆,浅拷贝是指拷贝时只拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用所指向的对象,拷贝出来的对象的所有变量的值都含有与原来对象相同的值,而所有对其他对象的引用都指向原来的对象,简单地说,浅拷贝只拷贝对象不拷贝引用。深拷贝: 深拷贝又称为深复制,深克隆,深拷贝不仅拷贝对象本身,而且还拷贝对象包含的引用所指向的对象,拷贝出来的对象的所有变量(不包含那些引用其他对象的变量)的值都含有与原来对象的相同的值,那些引用其他对象的变量将指向新复制出来的新对象,而不指向原来的对象,简单地说,深

标签:递归  结构  

RESTful API(Representational State Transfer

标签:人工智能  eureka  云原生  机器学习  支持向量机  

多阶段构建是一个新特性,需要 Docker 17.05 或更高版本的守护进程和客户端。对于那些努力优化 Dockerfiles 并使其易于阅读和维护的人来说,多阶段构建非常有用。在多阶段构建之前构建镜像时最具挑战性的事情之一就是缩小镜像大小。Dockerfile 中的每一条指令都会在镜像中添加一个层,在进入下一层之前,您需要记住清除所有不需要的工件。要编写一个真正高效的 Dockerfile,传统上需要使用 shell 技巧和其他逻辑来保持层尽可能小,并确保每一层都有它需要的来自前一层的工件,而没有其他东西。实际上,有一个 Dockerfile 用于开发环境(包含构建应用程序所需的所有内容),同时有一个精简

标签:镜像  阶段  docker  

一、redis 简介1、什么是 redis?  redis 是一个开源免费的高性能的 key - value 数据库。  支持数据持久化,即可以将内存的数据存储在磁盘中,重启服务后可以再次加载磁盘中的数据并使用。  支持多种类型,比如:String(字符串)、List(列表)、Set(集合)、zset(有序集合)、Hash(散列) 等。  支持数据备份,主从模式的数据备份(master - slave)。  redis 所有操作都是原子性的,即要么成功执行,要么不执行。官网:  https://redis.io/ 2、安装 redis(1

标签:数据结构  命令  常用  redis  

对于jsp我是纯新手,没学过jsp的上一代,直接开始学的jsp。

标签:java  服务器  eclipse  servlet  

从逻辑上看:描述信息的数据存在数据库中并由DBMS统一管理从物理上看:描述信息的数据事宜文件的方式存储在物理磁盘上数据库文件分为:1.数据文件:存放数据库数据和数据仓库对象的文件主要数据文件(.mdf)+次要数据文件(.ndf)

标签:结构  数据库  

1、DataGen SQL 连接器 FLinkSQL中可以使用内置的DataGe

标签:# FlinkSQL 使用技巧  数据库  

断断续续地把这个系列写完了,就像上一个设计模式一样,算法这个系列也是前前后后写了将近有一年的时间。当然,都是在业余或者晚上的时间写完的,所以进度如此地慢。更主要的是,既然要写,总得要自己先弄懂吧,对于一个没上过高中的人来说,这还真的是有点困难。所以说,在这一系列的文章中,可能有许多纰漏甚至是错误,这个也欢迎大家随时指正。继续扩展提高关于数据结构与算法这门课程,在我的系列文章中,只是简单的入了个门。仅仅从教材来说,就还有许多内容并没有涉及,实在是本人水平有限,大家可以自己再继续深入地学习。串:字符串、串的匹配(BF、KMP)树:二叉排序树、

标签:数据结构  算法  php  

猜你喜欢

一、要求  1.设计并验证如下算法:图采用邻接矩阵表示,实现无向图的深度优先搜索与有向图的广度优先搜索。  2.设计并验证如下算法:带权图采用邻接表表示,实现无向图的广度优先搜索与有向图的深度优先搜索。二、代码1.#include<stdio.h>#include<stdlib.h>#include<time.h>

标签:数据结构  及其应用  

一、HBase简介HBase是一个开源的、分布式的、版本化的NoSQL数据库(即非关系型数据库),依托Hadoop分布式文件系统HDFS提供分布式数据存储,利用MapReduce来处理海量数据,用Zookeeper作为其分布式协同服务,一般用于存储海量数据。HDFS和HBase的区别在于,HDFS是文件系统,而HBase是数据库。HBase只是一个NoSQL数据库,把数据存在HDFS上。可以把HBase当做是MySQL,把HDFS当做是硬盘。二、HBase的数据结构1、索引结构:LSM树传统关系型数据普通索引采用B+树。

标签:数据结构  原理  hbase  

一分钟精华速览越来越多企业正在通过故障注入和演练的方式提升系统可靠性,这其中金融行业的应用较为特殊。一方面其可靠性要求比非涉账类系统更高;另一方面金融行业有更加严格的监管要求,如客户、账目等信息都有严格约束。加之金融系统较其他行业系统更加庞大、繁杂,所以金融行业落地混沌工程和故障演练等工作需尤为谨慎、严谨。本文介绍了中国人寿故障演练的项目背景、目标思路、技术方案等,分享其在预知故障和降低不确定性风险方面的实践成效。

标签:中国人寿  分阶段  故障  金融  如何在  

什么是orm ORM&#xff08;对象关系映射&#xff09;是一种技术或工具

标签:NestJS  node.js  typescript  后端  数据库  前端  

泛型是一种减少重复代码编写需求的方法&#xff0c;而是将此任务委托给编译器&#xff0c;同时也使

标签:rust  开发语言  后端  

Python有一个庞大且可扩展的库&

标签:python  JSON  开发语言  

15. 三数之和   「题目&#xff1a;」

标签:算法  leetcode  数据结构  哈希表  哈希  

npmnode package manager1.npm网站  npmjs.com2.npm命令行工具  npm 的第二层含义就是一个命令行工具,只要你安装了node 就已经安装了npm。  

标签:如何解决  方式  npm  

Java常用的数据结构Java中的数据结构:数组(Array)链表(Linked List 一种递归结构数据)栈(Stack 按照后进先出、先进后出的原则来存储数据)队列(Queue)树(Tree 是由n (n>0) 个有限节点组成的一个具有层次关系的集合)堆(Heap)图(Graph)哈希表(Hash)

标签:数据结构  常用  java数据结构  常用  java  

相关问题

相关文章

热门文章

推荐文章

相关标签