掌握 React 中的 useImperativeHandle(使用 TypeScript)

掌握 react 中的 useimperativehandle(使用 typescript)

使用 typescript 构建 react 应用程序时,开发人员经常遇到需要创建具有高级功能的自定义、可重用组件的场景。本文将探讨两个强大的概念:用于对引用管理进行细粒度控制的 useimperativehandle 挂钩,以及创建表单验证和模态组件等自定义组件。

我们将深入探讨:

useimperativehandle 钩子:它的作用、何时使用它以及它如何允许您自定义父组件可以访问的 ref 值。创建表单验证组件:使用 typescript 构建可重用组件进行表单验证的实际示例。实现模态组件:另一个示例展示如何使用 typescript 创建交互式且可重用的模态。

这些示例将帮助初学者了解如何利用 typescript 构建交互式和可重用的组件,同时探索引用管理等高级概念。读完本文后,您将为在 react 应用程序中创建强大的自定义组件奠定坚实的基础。

什么是 useimperativehandle?

useimperativehandle 是 react 中的一个钩子,允许您自定义父组件可以访问的 ref 对象。当您想要向父组件公开自定义 api,而不是公开组件的内部实现细节时,这非常有用。

何时以及为何应该使用它

在大多数情况下,useref 提供了足够的功能来访问 dom 元素或组件实例。但是,当您需要更多控制时,useimperativehandle 就会介入,提供一种仅向父组件公开您选择的方法或状态的方法。这可以确保您的组件保持模块化、封装性并且更易于维护。该钩子还允许更好的抽象,这意味着您可以在应用程序中以最少的重复重复使用组件。

示例 1 – 拨动开关组件

此示例演示了如何使用 typescript 创建切换开关组件。组件使用 useimperativehandle 向父组件公开自定义 api,允许父组件控制开关状态。

用例:创建可由父组件控制的自定义切换开关组件。实施:定义组件并使用 useimperativehandle 公开自定义 api。在父组件中创建一个 ref 并将其传递给 toggleswitch 组件。使用ref调用自定义api并控制开关状态。

import react, { forwardref, `useimperativehandle`, usestate } from "react";interface toggleref {  toggle: () => void;  getstate: () => boolean;}type toggleswitchprops = {  initialstate?: boolean;};const toggleswitch = forwardref((props, ref) => {  const [istoggled, setistoggled] = usestate(props.initialstate ?? false);  `useimperativehandle`(ref, () => ({    toggle: () => setistoggled(!istoggled),    getstate: () => istoggled,  }));  return (     setistoggled(!istoggled)}      classname="flex items-center justify-start w-12 h-6 p-1 overflow-hidden bg-gray-300 rounded-full"      animate={{        backgroundcolor: istoggled ? "#4caf50" : "#f44336",      }}      transition={{ duration: 0.3 }}    >            );});function example() {  const toggleref = useref(null);  return (    
);}

登录后复制

示例 2 – 手风琴组件

此示例演示了如何使用 typescript 创建手风琴组件。该组件使用 useimperativehandle 向父组件公开自定义 api,允许父组件控制折叠状态。

用例:创建可由父组件控制的自定义手风琴组件。实施:定义组件并使用 useimperativehandle 公开自定义 api。在父组件中创建一个 ref 并将其传递给 accordion 组件。使用ref调用自定义api并控制accordion状态。

interface AccordionRef {  expand: () => void;  collapse: () => void;  isExpanded: () => boolean;  toggle: () => void;}type AccordionProps = {  initialState?: boolean;  title: string;  content: ReactNode;};const Accordion = forwardRef((props, ref) => {  const [expanded, setExpanded] = useState(props.initialState ?? false);  `useImperativeHandle`(ref, () => ({    expand: () => setExpanded(true),    collapse: () => setExpanded(false),    isExpanded: () => expanded,    toggle: () => setExpanded((prev) => !prev),  }));  const handleToggle = () => {    setExpanded((prev) => !prev);  };  return (    
{props.title} {expanded && (
{props.content}
)}
);});function Example() { const accordionRef = useRef(null); return (
);}

登录后复制

使用 useimperativehandle 的优点

useimperativehandle 提供了一些关键的好处,特别是在构建可重用和交互式组件时:

封装
通过使用 useimperativehandle,您可以隐藏组件的内部实现细节,并仅公开您希望父级与之交互的方法。这可以确保您的组件保持其内部逻辑,而不受外部因素的影响,使其更加健壮。

细粒度控制
它使您可以对 ref 对象进行细粒度控制。您无需公开整个组件实例或 dom 节点,而是可以决定哪些方法或值可用。当使用表单、切换或模态等复杂组件时,这一点至关重要。

提高可重用性
通过抽象某些逻辑并控制向父级公开的内容,您的组件可以变得更加可重用。例如,表单验证组件或使用 useimperativehandle 构建的模式可以轻松地在具有不同配置的应用程序的多个部分中重用。

清除父组件的 api
您可以为父组件创建一个干净、定义良好的 api,而不是提供对整个组件的直接访问。这会减少错误并提高组件行为的可预测性。

typescript 中更好的类型安全
借助 typescript,useimperativehandle 变得更加强大。您可以定义父级可以使用的确切方法和属性,从而提高类型安全性并确保开发人员在使用组件时遵循预期的 api。

结论

useimperativehandle 是一个强大的钩子,允许您自定义父组件可以访问的 ref 对象。当您想要向父组件公开自定义 api,而不是公开组件的内部实现细节时,这非常有用。

通过使用useimperativehandle,您可以创建更灵活、更强大的自定义组件,这些组件可以轻松地被父组件重用和自定义。

资源

react 文档 – useimperativehandlereact 文档 -forwardrefreact 文档 – usereftypescript 文档

以上就是掌握 React 中的 useImperativeHandle(使用 TypeScript)的详细内容,更多请关注【创想鸟】其它相关文章!

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2669468.html

(0)
上一篇 2025年3月7日 12:44:57
下一篇 2025年2月23日 17:00:52

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • RemoveCookieWall,Firefox 扩展

    您是否厌倦了网站上流行的横幅,以便您接受第三方 cookie 或结账?在这篇文章中,我解释了如何制作(并发布)一个 firefox 扩展以避免大多数网站出现这种情况 信息 此扩展的代码发布于 https://github.com/jaged…

    2025年3月7日
    200
  • 如何使用 HTML 和 CSS 使图像在悬停时旋转

    图像上的悬停旋转效果可以使您的内容更具吸引力和互动性。在本教程中,我们将引导您了解如何仅使用 html 和 css 创建简单但引人注目的悬停旋转效果。 如何创造效果 html: 首先,添加以下 html 代码: @@##@@ 登录后复制 您…

    2025年3月7日
    200
  • 为什么 JavaScript 在 OG Webapp King 初学者指南中仍然相关

    介绍 啊,JavaScript。这种编程语言永不过时,就像 90 年代的一支乐队不断发行无人问津的专辑 – 但不知何故,我们一直在听。如果您是 Web 开发新手,或者只是好奇为什么 JavaScript 在 2024 年仍然流行…

    2025年3月7日
    200
  • 使用 React Router v6 在 React 中实现面包屑

    面包屑在网页开发中非常重要,因为它们为用户提供了一种跟踪其在网页中当前位置的方法,并有助于网页导航。 在本指南中,我们将使用 react-router v6 和 bootstrap 在 react 中实现面包屑。 react-router …

    2025年3月7日
    200
  • 我的第一个 Hacktoberfest 贡献!!!

    黑客啤酒节 今天是 2024 年 10 月 1 日,标志着 Hacktoberfest 的开始。 Hacktoberfest 是为期一个月的开源项目、其维护者以及整个贡献者社区的庆祝活动。 我的第一个贡献 背景 由于 Hacktoberfe…

    2025年3月7日
    200
  • typescript在哪里学习

    可以在多种平台学习 TypeScript,包括在线平台(Codecademy、Udemy、Coursera)、书籍和文档(官方文档、《TypeScript 深入浅出》)、社区和论坛(Slack 群组、Stack Overflow、GitHu…

    2025年3月7日
    200
  • typescript用得多吗_typescript怎么使用

    TypeScript 正处于迅速增长阶段,在 2023 年 Stack Overflow 开发者调查中排名第四,其受欢迎度上升归因于类型检查、编辑器增强、代码重用、与 JavaScript 的互操作性,以及社区支持。使用 TypeScrip…

    2025年3月7日
    200
  • 如何隐藏地址栏 js

    使用 JavaScript 隐藏地址栏的步骤如下:设置 overflow 属性为 hidden,阻止页面滚动。使用 touchmove 和 preventDefault 事件,禁用触摸设备的滚动。(可选)添加 meta 标签以禁用移动设备的…

    2025年3月7日
    200
  • node.js如何学

    学习 Node.js 的入门步骤:熟悉 JavaScript 语言安装 Node.js创建 Node.js 文件并打印信息导入模块理解事件和回调进行 HTTP 请求进行数据库操作操作文件系统使用命令行界面部署和测试应用程序 如何学习 Nod…

    2025年3月7日
    200
  • js如何进阶

    进阶 JavaScript 技巧包括:熟练掌握基础知识;理解高级概念,如 OOP 和闭包;使用 ES6+ 语法和模块系统;通过实践和项目巩固理解;了解并使用框架和库;持续学习新知识;加入社区寻求帮助和分享知识;掌握调试和故障排除技巧;进行性…

    2025年3月7日
    200

发表回复

登录后才能评论