热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

何时在React18中使用“useImperativeHandle”和“forwardRefs”

何时在React18中使用“useImperativeHandle”和“forwardRefs”有时,你必须拿出大枪imageoftitlebyauthor这篇文章是续https:

何时在 React 18 中使用“useImperativeHandle”和“forwardRefs”

有时,你必须拿出大枪

image of title by author

这篇文章是续 https://betterprogramming.pub/react-v18-demystifying-useref-forwardref-and-useimperativehandle-feec2fc5b2f6 我们在哪里看到了 refs 是什么以及它们是如何运作的。借助从上一篇文章中获得的知识,让我们深入了解一些更复杂的理解,它可以在具有大量组件嵌套和一些真正基于 DOM 的需求的实际项目中派上用场。


前向参考

什么是没有问题的解决方案,对吧?所以,让我们定义一个常规裁判无法完成工作的情况。如果我们有一个父组件想要引用子组件中定义的元素之一并修改焦点状态怎么办?让我们创建一个这样的例子。

The parent component controls the focus of the button defined in the child component.

如上所示,父组件控制子组件按钮的焦点。它并不像将父级中定义的 ref 作为道具传递给子级那么简单。在我们的例子中, ref 是一个特殊属性,定义在要更改焦点的确切 HTML 元素上,而不是子组件包装器,因为它只是一个函数。

我们可以通过将子组件包装成一个 前向引用 React 提供的函数,它将处理这个委托。这个函数应该传输发送的 props 并允许组件上有一个额外的 props,即我们的“ref”。这是代码:

How to use forwardRef in React?


使用命令式句柄

好吧,看起来,我们在上一节中取得的成就对于即使是复杂的情况也足够了。不过,有时您可能会想在组件内定义自定义 ref 功能,该功能将暴露给使用它的组件。让我们尝试创建一个需要这种细粒度控制的情况。

默认情况下,输入的焦点颜色是 蓝色的 但是假设我们的忍者应该得到一个超临界的上忍级别任务,那么输入字段应该集中在 红色的 反而。

The parent component can control which colour the child’s input focuses on.

为了说明使用 使用命令式句柄 在这种情况下,让我们脱离常识,构建两个通过 ref 绑定到输入组件的自定义方法。这一次,我们将有两个自定义方法,而不是默认的焦点方法 焦点红色() 焦点蓝() .

我们仍然需要使用 前向引用 将 ref 传递给子组件,但在子组件内部,我们将在 使用命令式句柄 钩。代码如下所示:

We are adding custom methods to the ref using useImperativeHandle.


需要注意的重要一点是,在上面的代码中,我们并没有像以前那样扩展默认可用的方法,而是创建了一组全新的方法。所以 _默认焦点()_ 方法不再可供我们使用,调用它会给我们带来甜蜜的错误。


The focus method is not available when using the imperative handle.


结论

总结一下,我将重复我在上一篇文章中所说的:在进行基于虚拟 dom 的开发时,不应该使用对 DOM 本身的引用,因为您在真实 DOM 中所做的更改不会正确地转移到 vDOM设置,这会导致意外的反应。

我选择了 重点 作为本文的中心主题,因为它是需要召唤裁判时的主要需求之一。 React 提到了一组有限的 refs 用例,你可以在这里看到: https://reactjs.org/docs/refs-and-the-dom.html#when-to-use-refs .

**想要连接?** 领英:[ https://www.linkedin.com/in/sameerkumar1612](https://www.linkedin.com/in/sameerkumar1612/)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/33144/34551308



推荐阅读
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • TechStride 网站
    TechStride 成立于2014年初,致力于互联网前沿技术、产品创意及创业内容的聚合、搜索、学习与展示。我们旨在为互联网从业者提供更高效的新技术搜索、学习、分享和产品推广平台。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 作为一名 Ember.js 新手,了解如何在路由和模型中正确加载 JSON 数据是至关重要的。本文将探讨两者之间的差异,并提供实用的建议。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 基于Node.js、Express、MongoDB和Socket.io的实时聊天应用开发
    本文详细介绍了使用Node.js、Express、MongoDB和Socket.io构建的实时聊天应用程序。涵盖项目结构、技术栈选择及关键依赖项的配置。 ... [详细]
author-avatar
蓝色流星魂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有