React Hooks 流程:深入探讨

许多开发人员都了解 react,但缺乏了解可能会导致对事物如何工作的假设。清楚地了解 react 中的钩子流程可以极大地提高您的代码质量。在使用 react 4 年多之后,我想分享一些关于 react hooks 流程的重要见解,这是一个经常被忽视的概念。

在深入了解 hooks 流程之前,我想回顾一下 hooks 规则

1。只在顶层调用 hooks
不要在循环、条件或嵌套内调用 hooks
函数。相反,请始终在
的顶层使用 hooks react 函数,在任何早期返回之前

2。仅从 react 函数(组件或自定义 hook)调用 hook
不要从常规 javascript 函数中调用 hook。

react hook 流程

此 react hooks 流程图有助于可视化在组件生命周期的不同阶段调用钩子的顺序。

React Hooks 流程:深入探讨

让我们探索组件生命周期的每个阶段。

初始安装
这是组件首次加载到屏幕上的时间。

React Hooks 流程:深入探讨

运行惰性初始化器
在 react 中,状态初始化在组件的整个生命周期中仅发生一次。

通过“初始化”,我的意思是 usestate 的初始值只会被分配给变量一次。

React Hooks 流程:深入探讨

这是很正常的,通常不必担心。然而,当初始化涉及复杂的计算时,例如从本地存储设置状态,它就变得更加重要。

const [userlist, setuserlist] = usestate(localstorage.getitem("userslist"))

目前,localstorage.getitem(“userslist”) 会在每次重新渲染时执行,但其结果不会分配给状态变量。这种重复评估可能会导致性能问题。为了避免这种情况,您可以向 usestate 传递一个回调函数,该回调函数只会在挂载阶段执行一次。

const [userlist, setuserlist] = usestate(() => localstorage.getitem("userslist"))

这称为状态的延迟初始化,请在此处阅读更多内容

延迟初始化有助于防止在每次重新渲染时运行不必要的初始化逻辑。

注意:仅当状态初始化涉及计算时才使用初始化函数。

渲染
在此步骤中,react 调用函数(组件)来生成该组件的虚拟 dom 表示。此过程并不直接意味着该组件在屏幕上对用户可见。相反,它涉及 react 创建一个虚拟 dom 对象来描述 ui 应该是什么样子。

这是虚拟 dom (vdom) 对象的示例:

const ComponentA = () => {  return 

Hello World!

}

vdom 对象
{
$$typeof: 符号(react.element),
键:空,
道具:{children:’你好世界!’},
参考:空,
输入:“h1”,
…..
};

react 更新 dom
在生成虚拟 dom 并协调它以获得最终的虚拟 dom 后,react 会相应地更新实际 dom。

运行 layouteffects
此步骤涉及运行 uselayouteffect 钩子,该钩子与 useeffect 类似,但在浏览器执行任何绘制之前执行,请在此处查看更多信息

浏览器绘制屏幕
浏览器将 dom 绘制到屏幕上

运行效果
这是 useeffect 挂钩运行的步骤,即在浏览器上渲染 ui 之后

如果useeffect中有状态更新,则会触发组件的更新生命周期

更新
当任何状态更新被触发时,都会触发组件的更新生命周期

React Hooks 流程:深入探讨

渲染react 更新 dom
这些步骤与安装阶段类似

清理布局效果
创建虚拟 dom (vdom) 并更新实际 dom 后,react 会运行 uselayouteffect 挂钩的清理函数。

注意:如果 uselayouteffect 的依赖没有改变,它的清理功能将不会运行。

运行 layouteffects
如果任何依赖项比较返回 false,表明发生更改,则 uselayouteffect 将再次运行;否则就不会。

浏览器绘制屏幕
此时,浏览器将更新后的 dom 渲染到屏幕上。

清理效果运行效果
仅当依赖项与之前的渲染相比发生变化时,useeffect 清理和执行才会发生。如果没有任何依赖项发生更改,则清理函数和效果都不会运行。

卸载
这是组件生命周期的最后阶段,组件将从 dom 中删除,并且不再对用户可见。

React Hooks 流程:深入探讨

清理布局效果清理效果
在从 dom 中删除组件之前,react 会为 uselayouteffect 和 useeffect 钩子运行所有清理函数。

下次您在 ui 中遇到错误时,可视化挂钩流程以查明代码中的正确位置以调查并解决问题。我希望这可以帮助您提高编码技能。快乐编码!

以上就是React Hooks 流程:深入探讨的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1499588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
React 新钩子 useActionState
上一篇 2025年12月19日 21:53:22
我的 React 之旅:第 19 天
下一篇 2025年12月19日 21:53:38

相关推荐

  • audition如何创建自定义工作区

    audition是一款专业级的音频处理软件,通过创建个性化的自定义工作区,用户可以根据自己的操作习惯和编辑需求,大幅提升工作效率。以下是详细的设置步骤: 第一步,启动audition程序。进入主界面后,找到顶部菜单栏中的“窗口”选项并点击。 第二步,在展开的下拉菜单中会列出多个可调用的面板选项。根据…

    2026年8月29日
    200
  • 抖音作品浏览量在哪里看?怎样提升抖音的浏览量

    随着抖音平台的持续火热,越来越多用户加入到短视频创作的行列中。对于创作者而言,了解自己作品的浏览情况成为关注重点。那么,抖音作品的浏览量究竟在哪里查看?又该如何有效提升呢?本文将为你全面解析,助你轻松掌握作品数据。 一、如何查看抖音作品的浏览量 1. 通过手机或电脑端查看 (1)手机端操作步骤 1.…

    2026年8月29日
    100
  • win10怎么解决100%磁盘占用_win10磁盘占用100%的终极解决方法

    禁用Windows Search服务以减少索引占用;2. 关闭SysMain(原Superfetch)避免预加载过度使用磁盘;3. 停用未使用的家庭组服务降低后台负载;4. 运行chkdsk /f /r修复磁盘错误;5. 禁用DiagTrack等遥测服务减少数据收集;6. 手动设置虚拟内存大小减轻频…

    2026年8月29日
    100
  • 汉字魔法振作士气过关攻略

    汉字魔法振作士气过关攻略汉字魔法振作士气过关攻略汉字魔法振作士气过关攻略汉字魔法振作士气过关攻略

    汉字魔法是一款休闲益智类游戏,每一关都需要玩家根据不同的汉字进行解谜。在这一关中,玩家进入关卡后会看到许多杂乱的部首,首先需要将“士”字摆正,然后将剩余的部首组合成一个“鼓”字。完成拼接后,连续点击“鼓”字即可顺利通关。 汉字魔法振作士气关卡攻略:士气 提示: 图文攻略: 1、进入游戏关卡后,你会看…

    2026年8月29日 用户投稿
    200
  • linux系统结构包括什么

    linux系统结构包括:内核、shell、文件系统和应用程序。同时内核、shell和文件系统一起构成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。 Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,…

    2026年8月29日
    000
  • swoole框架中文教程pdf

    Swoole 是一个高效的 PHP 异步编程框架,使用事件驱动架构处理高并发连接。本教程涵盖 Swoole 安装、事件驱动、服务器创建、HTTP 和 WebSocket 处理、数据库操作、队列处理以及部署和监控。Swoole 的优势包括高并发处理、低延迟、扩展性强和资源利用优化。由于版权问题,无法提…

    2026年8月29日
    100
  • 魅族18pro怎么设置桌面壁纸_魅族18pro设置桌面壁纸方法

    魅族18pro怎么设置桌面壁纸_魅族18pro设置桌面壁纸方法魅族18pro怎么设置桌面壁纸_魅族18pro设置桌面壁纸方法魅族18pro怎么设置桌面壁纸_魅族18pro设置桌面壁纸方法魅族18pro怎么设置桌面壁纸_魅族18pro设置桌面壁纸方法

    php小编鱼仔为您带来魅族18 pro怎么设置桌面壁纸的方法。想要在魅族18 pro上设置个性化的桌面壁纸吗?不妨跟随本文的简单教程,轻松学会如何为您的手机设置各类壁纸,让手机焕然一新! 1、长按桌面空白处,进入主屏幕编辑状态。 2、点击更换壁纸。 3、选择喜欢的图片,点击设为壁纸,也可以设置为al…

    2026年8月29日 用户投稿
    200
  • 如何解决中文转拼音的问题?overtrue/pinyin库助你轻松搞定!

    可以通过一下地址学习composer:学习地址 在开发一个多语言支持的项目时,我遇到了一个棘手的问题:如何将中文准确地转换成拼音。特别是处理多音字时,常规的解决方案往往不够精确,导致用户体验不佳。经过一番探索,我找到了 overtrue/pinyin 这个库,它不仅能高效地处理中文转拼音,还能准确处…

    用户投稿 2026年8月29日
    000
  • 曝苹果折叠iPhone可能采用友商铰链方案 专利限制?

    近日,有数码博主在微博爆料称,苹果计划于明年推出的折叠屏iphone因铰链强度问题,可能被迫采用华为、荣耀或三星等友商的铰链方案。该博主指出,华为、荣耀和三星在铰链领域的专利布局“近乎垄断”,导致苹果难以开发全新设计,甚至面临侵权风险。 折叠iPhone假想图 苹果折叠屏iPhone的研发已持续多年…

    2026年8月29日
    000
  • 如何使用tree命令只显示特定目录下的文件?

    关于tree命令只显示特定目录下文件的用法 我们知道tree命令可以用来以树状结构显示目录下的文件和子目录。 很多时候,我们需要过滤掉一些不关心的文件或目录,例如node_modules、cache等。 提问者已经掌握了使用-I选项排除指定文件或目录的方法。 但是,如果我们只想显示当前目录下特定文件…

    用户投稿 2026年8月29日
    000
  • 怎么解决mysql服务无法启动1069

    怎么解决mysql服务无法启动1069怎么解决mysql服务无法启动1069怎么解决mysql服务无法启动1069怎么解决mysql服务无法启动1069

    解决mysql服务无法启动的1069错误方法:1、在管理用户中找到mysql用户并重新设置mysql密码;2、在服务中找到mysql服务选项,在属性中通过更改后的密码重新登录mysql服务即可。出现1069错误的原因是更改了服务器的登录密码。 本教程操作环境:windows10系统、mysql8.0…

    2026年8月29日 用户投稿
    300
  • swoole教程全套学习

    Swoole 是一个高性能 PHP 异步网络框架,使用多进程、事件循环和协程实现并发。安装:使用 Composer 或手动安装 Swoole 源代码。使用:创建 HTTP 服务器、处理 WebSocket 连接和使用协程并行执行任务。高级功能:支持集群、定时任务和数据库连接池。 Swoole 教程:…

    2026年8月29日
    100
  • 谷歌浏览器密码管理器怎么使用_谷歌浏览器密码管理器如何使用详细方法

    谷歌浏览器密码管理器怎么使用_谷歌浏览器密码管理器如何使用详细方法谷歌浏览器密码管理器怎么使用_谷歌浏览器密码管理器如何使用详细方法谷歌浏览器密码管理器怎么使用_谷歌浏览器密码管理器如何使用详细方法谷歌浏览器密码管理器怎么使用_谷歌浏览器密码管理器如何使用详细方法

    谷歌浏览器密码管理器可自动保存、填充和管理登录信息。先在设置中开启“提供保存密码”功能,登录网站时即可提示保存;保存后可在“密码管理器”中查看、编辑或删除账号密码,支持跨设备同步与导入其他浏览器密码,建议避免在公共电脑使用并定期清理,配合强密码保障安全。 谷歌浏览器的密码管理器能帮你自动保存、填充和…

    2026年8月29日 用户投稿
    000
  • 《暗黑破坏神不朽》重大更新「自由王子」即将登场

    暴雪娱乐正式宣布,《暗黑破坏神 不朽》将在 6 月 20 日(星期五)迎来重要版本更新「自由王子」,本次更新将推出全新的主线任务、团队决斗玩法以及限时开启的套装猎人活动等丰富内容。从更新上线日起至 7 月 3 日(星期四),玩家还可于 battle.net 平台免费领取一颗五星霜血传奇宝石。 为庆祝…

    2026年8月29日
    700
  • 如何解决PHP与Avro序列化兼容性问题?使用flix-tech/avro-serde-php库可以!

    在处理一个需要与 Confluent 平台集成的大型项目时,我遇到了一个棘手的问题:如何确保在 Avro 序列化格式下,模式演变不会影响下游消费者。Confluent 开发的 Schema Registry 能够通过验证模式演变来解决这个问题,但遗憾的是,Confluent 并没有为 PHP 提供官…

    用户投稿 2026年8月29日
    000
  • linux云计算可以做什么

    linux云计算可以实现随时随地从可配置计算资源共享池中获取所需的资源,例如网络、服务器、存储、应用及服务等,这些资源能够快速供应并释放,使管理资源的工作量和与服务提供商的交互降到最低限度。 在互联网的大环境下,云计算、大数据、物联网、人工智能等概念逐渐被我们熟知,而且开始融入到我们的适用范畴内。什…

    2026年8月29日
    000
  • 欧盟批准诺基亚以23亿美元收购英飞朗

    诺基亚23亿美元收购英飞朗获欧盟批准!欧盟委员会2月26日宣布,已无条件批准诺基亚以23亿美元收购美国光学半导体和网络设备制造商英飞朗(infinera)的交易。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 欧盟委员会表示,此项收购不会造…

    2026年8月29日
    000
  • TGA将迎来首次?外媒称独立游戏今年或问鼎年度

    据外媒videogamer报道,2025年迄今在metacritic上评分最高的四款新作,清一色均为独立游戏——《哈迪斯2》(94)、《光与影:33号远征队》(93)、《空洞骑士:丝之歌》(92)以及《蓝途王子》(92)。这是自2019年以来,首次出现年度评分前四名被独立作品完全包揽的局面。 报道指…

    2026年8月29日
    100
  • swooie教程下载

    直接访问 Swooie 官网:https://www.swooie.com/。步骤:1. 访问 “教程” 标签;2. 在教程列表中找到所需教程;3. 点击 “下载” 按钮。下载选项包括 PDF、ZIP 和 Markdown 文件。 Swooie 教程下…

    2026年8月29日
    000
  • 魅族18spro在哪里关闭高清通话_魅族18spro关闭高清通话操作步骤

    php小编百草为您解答关于魅族18s pro在哪里关闭高清通话的问题。要关闭高清通话功能,只需进入设置-通话设置-高清通话,关闭相应选项即可。这样就能在不需要高清通话的时候轻松切换,让您的通话体验更加顺畅!希望以上操作步骤能够帮助您解决问题。 1、打开设置页面。 2、在设置页面,点击进入运营商网络。…

    2026年8月29日
    100

发表回复

登录后才能评论
关注微信