当前位置: 首页 > article >正文

HOW - React Developer Tools 调试器

目录

  • React Developer Tools
  • 使用
  • Components 功能特性
    • 1. 查看和编辑 props/state/hooks
    • 2. 查找组件
    • 3. 检查组件树
    • 4. 打印组件信息
    • 5. 检查子组件
  • Profiler 功能特性
    • Commit Chart
    • Flame Chart 火焰图
    • Ranked Chart 排名图
  • why-did-you-render

参考文档:

  • React调试利器:React DevTools
  • How to Use React Dev Tools – With Example Code and Videos

React Developer Tools

当你在开发一个 React 项目时,最简单的调试方式之一就是使用 React 开发者工具,React Developer Tools。

React Dev Tools 是由 React 团队开发的一款浏览器扩展,它允许开发者在浏览器的开发者工具中调试他们的代码。

使用

安装该扩展后,你会在开发者工具中看到两个新的标签页,分别是 Components(组件)和 Profiler(性能分析器)。

Components:
请添加图片描述
Profiler:
请添加图片描述

要使用该扩展的全部功能,你需要处于开发模式。这是因为在生产模式下,组件的名称会被替换为字母,这样你就无法对组件进行性能分析。

Components 功能特性

“Components” 标签页允许你在开发者工具中调试代码,并提供多种功能。让我们一一介绍这些功能:

1. 查看和编辑 props/state/hooks

请添加图片描述
可以帮助你查找组件,并在开发者工具中查看它对应的 props 和 state,而无需单独在控制台中打印它们

你可以直接编辑组件的 propsstate:这可以帮助你实时地查看变更效果,而无需重新加载或刷新网页。上面是一个示例视频,展示了它的使用方式。

2. 查找组件

你可以在整个应用中轻松搜索组件,只需在提供的搜索栏中输入组件名称。它会显示所有与关键词匹配的相关组件,之后你可以在匹配结果之间进行导航。

请添加图片描述

3. 检查组件树

在调试时,了解是哪些父组件导致子组件重新渲染是非常重要的。而直接在代码中查找这些信息有时会非常繁琐。React Dev Tools 中的 “rendered by”(渲染来源)部分能让这一过程变得更加简单,它会在一个地方列出所有相关的父组件。

请添加图片描述

4. 打印组件信息

请添加图片描述

如图示右侧,支持 Logging a component’s data in the console.

有些开发者喜欢在控制台中工作,而这个功能允许你只需点击一次,就能将组件的所有数据输出到控制台。它会展示该组件的所有相关信息,比如接收到的 props、使用的 hooks、在 DOM 中的节点位置,以及该组件在你本地系统中的文件路径。

5. 检查子组件

就像检查父组件在代码中并不总是容易一样,检查子组件也有类似的问题。

为了解决这个问题,你可以双击组件名称,这样就可以一次性查看目标组件内部的所有子组件,将以高亮的形式。

请添加图片描述

Profiler 功能特性

这个标签页允许你测试组件的性能,并显示哪些组件需要关注以进行优化。

要检查网页的性能,你只需按照以下步骤操作:

  1. 点击记录按钮。
  2. 使用你的网页,让性能分析器能够分析组件的渲染情况。
  3. 再次点击记录按钮以结束录制。
  4. 出现如下结果

在这里插入图片描述
如上所示,截图中标记了几个部分。让我们一一介绍它们:

  • A 是记录按钮,它可以帮助你录制性能分析会话。
  • B 是刷新按钮,它可以帮助你刷新页面以重新开始会话。
  • C 是清除按钮,它可以帮助你清除性能分析会话的结果。
  • D 是 Commit Chart,它会显示会话期间的 commits list。
  • E 是组件列表,它会显示在会话期间渲染的组件。
  • F 是 Flame Chart 火焰图按钮,它会像 E 一样显示组件列表。
  • G 是 Ranked Chart 排名图按钮,它会按排名方式显示组件列表。如下图
    请添加图片描述

现在让我们深入了解这个标签页中的不同功能,以及如何检查网页的性能。

Commit Chart

commit chart 显示了会话期间的提交列表。如上图所示,在 D 部分,有 33 根条形图。这些条形图代表会话中的 33 次提交。每次提交都会显示一个副作用,导致 DOM 更新

你可以在这些条形图之间切换,分别查看每个提交的详情。

Flame Chart 火焰图

火焰图显示了在一次提交中渲染的组件列表。如上面图示,当你点击标记为 F 的部分时,E 部分中的所有横向条形图代表第一次提交中的不同组件。

火焰图可以分析哪些组件花费了更多的时间来渲染。请注意,火焰图还会显示:

  1. 组件渲染的确切时间。
  2. 组件在性能分析会话中渲染所花费的时间。

例如,在下图中,SpaceCard 组件在 1.5 秒时渲染,并且渲染时间为 6.1 毫秒。

请添加图片描述

Ranked Chart 排名图

当你点击 G 部分所示的排名图标时,你将看到一个组件的图表视图。这个视图是按降序排列的,也就是说,花费最多时间渲染的组件会位于顶部,而花费最少时间渲染的组件会位于底部。

注意:你可以通过在 “Profiler” 标签页的设置中启用 “Record why each component rendered while profiling” 复选框来获取更多关于为何组件渲染的信息。以下是附带的参考图片:
请添加图片描述

React Dev Tools 是一个非常棒的扩展,适用于你在开发 React 应用时使用。它们可以帮助你轻松调试代码,并找出应用中的性能瓶颈。

why-did-you-render

有时,组件会重新渲染,但无法立即查明原因。虽然 React DevTools 很有用,但在大型应用中,它可能只会提供模糊的解释,例如“hook #1 已渲染”,这可能是无用的。

在这种情况下,你可以求助于 why-did-you-render 库。

相关文章:

HOW - React Developer Tools 调试器

目录 React Developer Tools使用Components 功能特性1. 查看和编辑 props/state/hooks2. 查找组件3. 检查组件树4. 打印组件信息5. 检查子组件 Profiler 功能特性Commit ChartFlame Chart 火焰图Ranked Chart 排名图 why-did-you-render 参考文档: React调试利器&a…...

STM32F103C8T6单片机开发:简单说说单片机的外部GPIO中断(标准库)

目录 前言 如何使用STM32F1系列的标准库完成外部中断的抽象 初始化我们的GPIO为输入的一个模式 初识GPIO复用,开启GPIO的复用功能时钟 GPIO_EXTILineConfig和EXTI_Init配置外部中断参数 插入一个小知识——如何正确的配置结构体? 初始化中断&#…...

Oracle序列介绍

文章目录 Oracle序列介绍1. Oracle序列演进2. Oracle序列使用3. Oracle身份列(自增列)4. Oracle序列常见使用与问题 Oracle序列介绍 1. Oracle序列演进 Oracle序列(Sequence)是数据库生成唯一数值序列的对象,主要用于…...

docker的安装使用0废话版本自学软硬件工程师778天

见字如面, 这里是AIGC创意人_竹相左边 上一篇 因为 自己开发客户系统,为了解决一键启动 前端后端,涉及到了docker-compose 在新的电脑上安装docker 有各种问题这里再次记录下,既是笔记也是分享。 我先用自己的话说一遍&#xff0…...

探秘 Svelte+Vite+TS+Melt - UI 框架搭建,开启高效开发

框架太“重”了:通常一个小型项目只由少数几个简单页面构成,如果使用 Vue 或者 React 这些框架来研发的话,有点“大材小用”了。构建的产物中包含了不少框架运行时代码(虚拟 DOM、响应式、状态管理等),这些代码对于小型项目而言是…...

3D数据共享标准——GLB文件格式揭秘

GLB 文件格式:跨平台 3D 数据共享的标准 简介 在这个数据爆炸的时代,3D 数据因其直观、逼真的特点而得到广泛应用。然而,不同 3D 软件和平台之间的兼容性一直是一个难题。 为了解决这一问题,GLB 文件格式应运而生。作为一种标准…...

微信小程序事件绑定基本语法

微信小程序使用 bind 或 catch 前缀绑定事件&#xff0c;语法如下&#xff1a; <组件 bind事件名"处理函数" catch事件名"处理函数"></组件> bind&#xff1a;事件绑定&#xff0c;允许事件冒泡&#xff08;向父组件传递&#xff09;。 catc…...

页面编辑器CodeMirror初始化不显示行号或文本内容

延迟刷新 本来想延迟100毫秒的&#xff0c;但是会出现样式向左偏移的情况&#xff0c;于是试了试500毫秒&#xff0c;发现就没有问题了&#xff0c;可能是样式什么是需要一个加载过程吧。 useEffect(() > {editorRef.current?.setValue(value || );setTimeout(() > {edi…...

vscode 连不上 Ubuntu 18 server 的解决方案

下载 vscode 历史版本 18.5&#xff08;windows请装在 系统盘 C 盘&#xff09; 打开 vdcode&#xff0c;将 自动更新 设置为 None &#xff08;很关键&#xff0c;否则容易前功尽弃&#xff09; 重命名&#xff08;删除&#xff09; 服务器上的 .vscode-server 文件夹 重新…...

云原生运维在 2025 年的发展蓝图

随着云计算技术的不断发展和普及&#xff0c;云原生已经成为了现代应用开发和运维的主流趋势。云原生运维是指在云原生环境下&#xff0c;对应用进行部署、监控、管理和优化的过程。在 2025 年&#xff0c;云原生运维将迎来更加广阔的发展前景&#xff0c;同时也将面临着一系列…...

Redis进阶--哨兵

目录 一、引言 二、介绍 三、哨兵的核心功能 四、使用docker进行单个主机redis主从复制哨兵操作 五、哨兵重新选取主节点的流程 1.主观下线 2.客观下线 3.主节点挂了 4.挑选新主节点 六、总结 一、引言 如果主从复制中&#xff0c;主节点挂了&#xff0c;从节点会迷茫…...

Franka 机器人x Dexterity Gen引领遥操作精细任务新时代

教授机器人工具灵活操作难题 在教授机器人灵活使用工具方面&#xff0c;目前主要有两种策略&#xff1a;一是人类遥控&#xff08;用于模仿学习&#xff09;&#xff0c;二是模拟到现实的强化学习。然而&#xff0c;这两种方法均存在明显的局限性。 1、人类遥控&#xff08;用…...

UE5 RPC调用示例详解

文章目录 前言一、示例场景二、代码实现三、关键点解析3.1 RPC类型选择3.2 可靠性设置3.3 权限控制3.4 输入处理 四、测试与验证总结 前言 在UE5中&#xff0c;RPC&#xff08;远程过程调用&#xff09;是实现多人游戏逻辑同步的核心机制。以下通过一个玩家跳跃的示例&#xf…...

专题|MATLAB-R语言Logistic逻辑回归增长模型在互联网金融共生及移动通信客户流失分析实例合集

全文链接&#xff1a;https://tecdat.cn/?p41343 作为数据科学家&#xff0c;我们始终关注如何通过模型创新揭示复杂系统的动态规律。本专题合集聚焦两大核心应用场景&#xff0c;通过 Logistic 增长模型与逻辑回归技术&#xff0c;为互联网金融共生演化与移动通信客户流失预警…...

从零构建一个全栈AI应用:Next.js + FastAPI + OpenAI API

&#x1f4a1; 为什么写这篇文章&#xff1f; 很多开发者希望构建一个能“聊天、问答、调用AI能力”的完整应用&#xff0c;但在前端、后端、模型接口之间打通时&#xff0c;常常踩坑。 今天这篇文章将手把手教你如何从零构建一个 AI 全栈应用&#xff1a; 前端用 Next.js 构…...

idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊

idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊 在 IntelliJ IDEA&#xff08;或其他 JetBrains 系列 IDE&#xff09;中无法运行某些命令&#xff0c;但在系统的命令提示符&#xff08;CMD&#xff09;中可以正常运行&#xff0c;这种情况通常是由于以下原因之一导致的…...

Dify 生成提示词的 Prompt

Dify 生成提示词的 Prompt **第1次提示词****第2次提示词****第3次提示词**总结 Dify 生成提示词是&#xff0c;会和LLM进行3次交互&#xff0c;下面是和LLM进行交互是的Prompt。 以下是每次提示词的概要、目标总结以及原始Prompt&#xff1a; 第1次提示词 概要&#xff1a; …...

ocr python库

ocr python库 上手Git、Gitee和Github&#xff01;watt toolkit...

【学生管理系统升级版】

学生管理系统升级版 需求分析&#xff1a;注册功能:登录功能&#xff1a;验证码规则&#xff1a;忘记密码&#xff1a; 实操&#xff1a;系统主页面注册功能登录功能忘记密码效果演示 需求 为学生管理系统书写一个登陆、注册、忘记密码的功能。     只有用户登录成功之后&…...

HTTP:二.URI及相关术语

HTTP相关技术和术语 WEB开发语言 **http:**Hyper Text Transfer Protocol 应用层协议,默认端口: 80/tcp WEB前端开发语言: htmlcssjavascripthtml Hyper Text Markup Language 超文本标记语言,编程语言,主要负责实现页面的结构 范例:html 语言 <html> <h…...

Web3 的云基础设施正在成型,Polkadot 2.0 用三项技术改写“上链成本”

在Web3基础设施内卷加剧的今天&#xff0c;“如何以更低成本、更大灵活性部署一条高性能应用链”正成为开发者们最关心的问题。而刚刚走出“技术慢热”误区的Polkadot&#xff0c;正在用一套名为 Polkadot 2.0 的架构升级方案&#xff0c;重新定义这一问题的解法。 这套升级最…...

【12】RUST智能指针

文章目录 智能指针Box<T>Rc<T>Weak<T>方法 Arc<T>RefCell<T>方法Ref<T>和RefMut<T> 常见使用方式 智能指针 Box<T> 数据存储在堆上只能有一个所有者 Rc<T> 单线程&#xff0c;引用计数不可变需要主要避免循环引用 …...

机器学习——ROC曲线、PR曲线

一、ROC曲线简介 1.1 ROC曲线的构成 1.横轴&#xff08;假正率&#xff0c;FPR&#xff09;&#xff1a; 表示负样本被错误分类为正的比例&#xff08;越小越好&#xff09; 2.纵轴&#xff08;真正率&#xff0c;TPR&#xff0c;即召回率&#xff09;&#xff1a; 表示正样…...

Unity AssetBundle依赖树可视化分析工具开发指南

一、需求分析与技术选型 1.1 需求背景 在Unity项目开发中&#xff0c;AssetBundle依赖关系管理是性能优化的关键。当项目资源量达到GB级别时&#xff0c;依赖树深度可能超过10层&#xff0c;容易导致&#xff1a; 资源重复打包&#xff08;平均冗余率可达15%-30%&#xff09…...

WebStorm中使用live-server插件

文章目录 1. 前提条件1.1 已安装Node1.1.1 淘宝的镜像1.2 安装live-server1.3 安装WebStorm2. Windows配置hosts3. WebStorm配置live-server3.1 WebStorm创建3.2 启动 live-server1. 前提条件 1.1 已安装Node Windows PowerShell 版权所有(C) Microsoft Corporation。保留所…...

RTP Payload Format for H.264 Vide(1)

摘要&#xff1a;&#xff1a; 本备忘录描述了一种用于 ITU-T H.264 视频编码标准&#xff08;与 ISO/IEC 国际标准 14496-10 技术上相同&#xff09;的 RTP 负载格式&#xff0c;但不包括可伸缩视频编码&#xff08;SVC&#xff09;扩展和多视角视频编码&#xff08;MVC&#…...

我为女儿开发了一个游戏网站

大家好&#xff0c;我是星河。 自从协助妻子为女儿开发了算数射击游戏后&#xff0c;星河就一直有个想法&#xff1a;为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣&#xff0c;但缺乏难度分级&#xff0c;无法根据女儿的学习进度灵活调整。而且&#xff0c;仅仅…...

【Spring Cloud Netflix】GateWay服务网关

1.基本概述 GateWay用于在微服务架构中提供统一的入口点&#xff0c;对请求进行路由&#xff0c;过滤和处理。它就像是整个微服务系统的大门&#xff0c;所有外部请求都要通过它才能访问到后端的各个微服务。 2.核心概念 2.1路由(Route) 路由是Spring Cloud gateWay中最基本…...

Docker部署Jenkins服务

文章目录 1.下载Jenkins服务2.部署Java21&#xff08;可选&#xff09;2.1 安装Java21 3.Maven3.9.9安装4.启动Jenkins5.初始化Jenkins5.1 入门5.2 安装推荐的插件5.3 创建第一个管理员用户5.4 实例配置5.5 Jenkins已就绪5.6 开始使用Jenkins5.7 重启Jenkins 6.配置Jenkins6.1 …...

[ctfshow web入门] web40

信息收集 怎么一下子多这么多过滤啊&#xff0c;我以为跳过了好几题 这又能eval了&#xff0c;但是连$也不能用了 不能用. * ?&#xff0c;所以打不出fla*或者fla?????了 不能用/&#xff0c;构造不出日志注入和伪协议包含 仔细观察&#xff0c;禁的是中文的括号&#x…...