iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >怎么掌握React组件树遍历技巧
  • 520
分享到

怎么掌握React组件树遍历技巧

2023-07-06 05:07:55 520人浏览 泡泡鱼
摘要

这篇文章主要介绍“怎么掌握React组件树遍历技巧”,在日常操作中,相信很多人在怎么掌握React组件树遍历技巧问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么掌握React组件树遍历技巧”的疑惑有所帮助!

这篇文章主要介绍“怎么掌握React组件树遍历技巧”,在日常操作中,相信很多人在怎么掌握React组件树遍历技巧问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么掌握React组件树遍历技巧”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

引言

本文对应的 react 版本是 18.2.0

下面的 dom 结构react 内部是如何遍历的

const App = () => {  return (    <div>      <button>+1</button>      <A count={0} />    </div>  );};const A = (props) => {  useEffect(() => {    console.log(props.count);  }, [props.count]);  return <div>{props.count}</div>;};

react 内部遍历核心逻辑:

  • render 时调用 commitPassiveUnmountOnFiber 函数

  • commitPassiveUnmountOnFiber 处理不同的 WorkTag,并调用 recursivelyTraversePassiveUnmountEffects

  • recursivelyTraversePassiveUnmountEffects 根据当前 Fiber 的子节点有没有 passive effectuseEffectuseLayoutEffect)来决定是否遍历当前 Fiber 的子节点

    • 具体从哪个兄弟节点开始遍历,react 选择的是离退出循环的那个叶子节点的父节点,检查有没有子节点,以此循环遍历

    • 如果子节点有 passive effect,则优先遍历子节点 (深度优先),直到找到最终的叶子节点,退出当前循环

    • 然后进入兄弟节点,开始遍历兄弟节点的子节点

    • 直到最后找到所有有 passive effect 的节点

代码简化:

commitPassiveUnmountOnFiber(root.current);function commitPassiveUnmountOnFiber(finishedWork) {  // 省略了处理不同的 WorkTag  recursivelyTraversePassiveUnmountEffects(finishedWork);}function recursivelyTraversePassiveUnmountEffects(parentFiber) {  // 省略了其他处理  if (parentFiber.subtreeFlags & PassiveMask) {    let child = parentFiber.child;    while (child !== null) {      commitPassiveUnmountOnFiber(child);      child = child.sibling;    }  }}

所以对于这段 dom 的遍历逻辑是:

  • 首先从根组件开始 FiberRootnode,取到 current

    • 也就是说 FiberRootNode.currentdiv#root 这是一个 fiber,它的 tag3

  • 由于 App 的子组件有 passive effect,所以会进入 App 组件,它的 tag0

  • App 组件中节点是 <div><di >tag5

    • <div> 下面有两个子元素 <button><A>

  • 先遍历 <button> 它的 tag5

  • <button> 内部只有一个文本节点,没有 passive effect

    • 所以 react 不遍历了(跳出当前遍历的循环,也就是 button 这条不在遍历了)

  • 跳出循环后,查看 button 的兄弟节点,它的兄弟节点是 <A><A>tag0

  • 由于 <A> 节点的子节点没有 passive effect,所以跳出循环,结束整个遍历

遍历逻辑如下图所示

图中画绿色勾的都会被遍历,红色勾是遍历的顺序

怎么掌握React组件树遍历技巧

到此,关于“怎么掌握React组件树遍历技巧”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么掌握React组件树遍历技巧

本文链接: https://www.lsjlt.com/news/357833.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么掌握React组件树遍历技巧
    这篇文章主要介绍“怎么掌握React组件树遍历技巧”,在日常操作中,相信很多人在怎么掌握React组件树遍历技巧问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么掌握React组件树遍历技巧”的疑惑有所帮助!...
    99+
    2023-07-06
  • 一文掌握React 组件树遍历技巧
    目录引言react 内部遍历核心逻辑:所以对于这段 dom 的遍历逻辑是:总结遍历逻辑如下图所示引言 本文对应的 react 版本是 18.2.0 下面的 dom 结构react ...
    99+
    2023-05-16
    React 组件树遍历 React 组件遍历
  • 掌握 VUE 循环技巧:遍历数据无畏无惧
    for v-for 循环: v-for 循环是遍历数组和对象的常用方法。其语法为: <template v-for="item in items"> {{ item }} </template> for of ...
    99+
    2024-04-02
  • 怎么掌握JS高阶编程技巧
    这篇文章主要讲解了“怎么掌握JS高阶编程技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么掌握JS高阶编程技巧”吧!单例设计模式用单独的实例来管理当前事...
    99+
    2024-04-02
  • easycom模式开发UNI-APP组件调用必须掌握的实用技巧
    本文旨在抛砖引玉,具体文档和easycom规范请移步uni-app官网。【传送门】easycom模式说明 easycom组件模式介绍 自HBuilderX 2.5.5起支...
    99+
    2024-04-02
  • vb.net递归遍历操作TreeView控件树的代码怎么写
    以下是一个示例代码,用于在VB.NET中使用递归遍历TreeView控件树: Private Sub TraverseTreeVie...
    99+
    2023-10-25
    vb.net TreeView
  • Shell脚本在Java开发中的实践:数组和文件操作技巧全掌握!
    在Java开发中,我们经常需要使用Shell脚本来完成一些系统级别的任务,比如文件操作、进程管理等。而Shell脚本中的数组和文件操作技巧则是我们必须掌握的基本功。本文将为大家介绍Shell脚本中的数组和文件操作技巧,并提供相应的代码示例...
    99+
    2023-10-31
    shell 数组 文件
  • Java程序员必须掌握的Shell脚本技巧:数组和文件操作不再难!
    作为一名Java程序员,掌握Shell脚本技巧是非常必要的。Shell脚本是一种能够自动化执行一系列命令的脚本语言,它可以帮助我们完成一些重复性的工作,提高效率。本文将介绍Java程序员必须掌握的Shell脚本技巧:数组和文件操作。 一、数...
    99+
    2023-10-31
    shell 数组 文件
  • 怎么掌握在Python中监控文件系统的技术
    这篇文章主要讲解了“怎么掌握在Python中监控文件系统的技术”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么掌握在Python中监控文件系统的技术”吧!看门狗watch dog通过阅读本...
    99+
    2023-06-15
  • vue3中怎么通过遍历传入组件名称动态创建多个component组件
    这篇文章主要介绍“vue3中怎么通过遍历传入组件名称动态创建多个component组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue3中怎么通过遍历传入组件名称动态创建多个component组...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作