返回顶部
首页 > 资讯 > 前端开发 > JavaScript >react中的useImperativeHandle()和forwardRef()用法
  • 418
分享到

react中的useImperativeHandle()和forwardRef()用法

react中useImperativeHandlereact中forwardRef 2022-11-13 14:11:45 418人浏览 八月长安
摘要

目录一、useImperativeHandle()二、forwardRef()三、案例父组件子组件一、useImperativeHandle() useImperativeHandl

一、useImperativeHandle()

useImperativeHandle(ref, createHandle, [deps])

useImperativeHandle 可以让你在使用 ref 时自定义暴露给父组件的实例值。在大多数情况下,应当避免使用 ref

这样的命令式代码。 useImperativeHandle 应当与 forwardRef 一起使用。

function FancyInput(props, ref) {
  const inputRef = useRef();
  useImperativeHandle(ref, () => ({
    focus: () => {
      inputRef.current.focus();
    }
  }));
  return <input ref={inputRef} ... />;
}
FancyInput = forwardRef(FancyInput);

在本例中,渲染 的父组件可以调用 inputRef.current.focus()。

二、forwardRef()

React.forwardRef 会创建一个React组件,这个组件能够将其接受的 ref 属性转发到其组件树下的另一个组件中。

这种技术并不常见,但在以下两种场景中特别有用:

(1)转发 refs 到 DOM 组件

(2)在高阶组件中转发 refs

React.forwardRef 接受渲染函数作为参数。React 将使用 props 和 ref 作为参数来调用此函数。此函数应返回 React 节点。 FancyButton 使用 React.forwardRef 来获取传递给它的 ref,然后转发到它渲染的 DOM button。这样,使用 FancyButton 的组件可以获取底层 DOM 节点 button 的 ref,并在必要时访问,就像其直接使用 DOM button 一样。

const FancyButton = React.forwardRef((props, ref) => (   // Step:3
  <button ref={ref} className="FancyButton">    // Step:4
      {props.children}
  </button>
));
const ref = React.createRef(); // Step:1
<FancyButton ref={ref}>Click me!</FancyButton>; // Step:2

在上述的示例中,React 会将 <FancyButton ref={ref}> 元素的 ref 作为第二个参数传递给 React.forwardRef 函数中的渲染函数。该渲染函数会将 ref 传递给 <button ref={ref}> 元素。 因此,当React 附加了 ref 属性之后,ref.current 将直接指向 <button> DOM 元素实例。 欲了解更多相关信息,请参阅官档 refs 转发。

以下是对上述示例发生情况的逐步解释:(转发 refs 到 DOM 组件)

  • 我们通过调用 React.createRef 创建了一个 React ref 并将其赋值给 ref 变量。
  • 我们通过指定 ref 为jsX 属性,将其向下传递给 <FancyButton ref={ref}>。
  • React 传递 ref 给 forwardRef 内函数 (props, ref) => ...,作为其第二个参数。
  • 我们向下转发该 ref 参数到 <button ref={ref}>,将其指定为 JSX 属性。
  • 当 ref 挂载完成,ref.current 将指向 <button> DOM 节点。

三、案例

父组件

1、注册

2、定义

3、触发

子组件

1、暴露子组件方法,将 forwardRef 接受的 ref 属性转发到其组件树下的另一个组件中

(1)

(2)

(3)父组件

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: react中的useImperativeHandle()和forwardRef()用法

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

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

猜你喜欢
  • react中的useImperativeHandle()和forwardRef()用法
    目录一、useImperativeHandle()二、forwardRef()三、案例父组件子组件一、useImperativeHandle() useImperativeHandl...
    99+
    2022-11-13
    react中useImperativeHandle react中forwardRef
  • ForwardRef useImperativeHandle方法怎么使用
    本文小编为大家详细介绍“ForwardRef useImperativeHandle方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“ForwardRef useImperativeHandle方法怎么使用”文...
    99+
    2023-07-05
  • React forwardRef的使用方法及注意点
    之前使用react.forwardRef始终无法应用于react高阶组件中,最近终于捣鼓出来了,于是记录下来。关键点就是React.forwardRef的API中ref必须指向dom...
    99+
    2024-04-02
  • 解决react-connect中使用forwardRef遇到的问题
    目录react-connect使用forwardRef遇到的问题项目场景原因问题描述解决方案React.forwardRef的使用说明应用场景但问题来了总结react-connect...
    99+
    2023-05-20
    react-connect使用forwardRef 使用forwardRef遇到问题 react-connect使用forwardRef问题
  • React Refs 的使用forwardRef 源码示例解析
    目录三种使用方式1. String Refs2. 回调 Refs3. createRef两种使用目的Refs 转发createRef 源码forwardRef 源码三种使用方式 Re...
    99+
    2022-11-13
    React Refs使用forwardRef React Refs
  • React中State与Props区别和用法
    本篇内容介绍了“React中State与Props区别和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • React的核心原理和用法
    本篇内容介绍了“React的核心原理和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1. ...
    99+
    2024-04-02
  • React 中使用 react-i18next 国际化的过程(react-i18next 的基本用法)
    目录简介安装与使用安装准备新建一个 React 项目,安装依赖包;使用检测当前浏览器语言国际化组件手动切换国际化语言总结本文使用 React-i18next 库结合 React, 介...
    99+
    2023-01-06
    React 使用 react-i18next 国际化 react i18next 国际化 react-i18next
  • React中使用Mobx的方法
    目录一、Mobx前端状态管理框架 基础概念?1. 什么是Mobx2. 什么是状态管理?3. 为什么需要状态管理?状态管理的一般思想(Flux)二、mobx的用法1. 安装 mobx2...
    99+
    2023-02-03
    React使用Mobx React使用Mobx
  • 关于react中useCallback的用法
    目录基础用法父组件子组件useCallback是react中比较重要的一个hook useCallback 用来返回一个函数,在父子组件传参或者通用函数封装中,起到举足轻重的作用。 ...
    99+
    2022-11-13
    react useCallback useCallback的用法
  • react中map的用法是什么
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react中map的用法是什么?React 中 map() 方法的使用,以及 key 值的绑定。1、这里以一个循环显示一个数组ToDoList的例子来展示...
    99+
    2023-05-14
    map React
  • react中的虚拟dom和diff算法详解
    虚拟DOM的作用 首先我们要知道虚拟dom的出现是为了解决什么问题的,他解决我们平时频繁的直接操作DOM效率低下的问题。那么为什么我们直接操作DOM效率会低下呢? 比如我们创建一个d...
    99+
    2024-04-02
  • 示例详解react中useState的用法
    useState useState 通过在函数组件里调用它来给组件添加一些内部 state。React 会在重复渲染时保留这个 state。useState 会返回一对值:当前状态...
    99+
    2024-04-02
  • React中10种Hook的使用方法
    本篇文章给大家分享的是有关React中10种Hook的使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。React Hook是什么?React官网是这么介绍的: Hook ...
    99+
    2023-06-25
  • React中使用antd组件的方法
    目录antd使用antdantd antd 是基于 Ant Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。 国内镜像为:https://ant-d...
    99+
    2024-04-02
  • react用g6的方法
    本篇文章和大家了解一下react用g6的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。react用g6使用方法:1、通过“npm install --save @antv/g6”命令在项目引入AntV G6;2、使用...
    99+
    2023-07-04
  • React中使用react-player播放视频或直播的方法
    业务中需要播放视频,寻来寻去,找到了react-player 初次点击,甚是眼熟,思来想去,竟是钉钉同款 如果使用react框架 先安装 npm install --save vid...
    99+
    2024-04-02
  • react中map方法如何用
    本篇内容主要讲解“react中map方法如何用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“react中map方法如何用”吧! 在r...
    99+
    2024-04-02
  • React中调和算法Diffing算法策略的示例分析
    这篇文章主要为大家展示了“React中调和算法Diffing算法策略的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“React中调和算法Diffing算法策略的示例分析”这篇文章吧。算法...
    99+
    2023-06-22
  • 详解react应用中的DOM DIFF算法
    目录前言 什么是Virtual DOM? 使用Virtual DOM的原因 DOM 渲染页面的操作流程 Virtual DOM的优势如何将DOM用virtual DOM 来表...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作