React中forwardRef()的作用?


前言

react中forwardRef()的基本使用,这里我只是列举了我自己开发时使用的方法,也可以使用该hook来获取dom节点的转发,来操作dom(本文就不详细说,就简单介绍了通过这个hook来调用各个独立组件的方法)


一、forwardRef( )有啥用?

在React中,forwardRef 是一个非常有用的高阶组件(HOC),它允许你将 ref 自动地通过组件传递给子组件。这在你需要直接访问 DOM 节点或组件实例时特别有用

二、使用步骤

这个通常和useRef()来配合使用,下面我们来使用forwardRef() 来实现函数式组件中获取实例来调用组件中的方法。(尤其是在使用函数组件时,因为函数组件没有实例,且默认情况下不接收 refs。)

1.不分模块组件调用

代码如下(示例):

import { useImperativeHandle } from "react";
import { useRef, forwardRef } from "react";

//子组件Son
const Son = forwardRef((props, ref) => {
  useImperativeHandle(ref, () => ({
    // 暴露的方法
    sayHello() {
      console.log("我被父组件调用了");
    },
  }));
  return <div>son</div>;
});

// 父组件App
function App() {
  const appRef = useRef(null);
  const handleClick = () => {
    appRef.current.sayHello();
  };
  return (
    <>
      <Son ref={appRef} />
      <button onClick={handleClick}>我想调用子组件中的方法</button>
    </>
  );
}

export default App;

2.分模块组件调用

代码如下(示例):App组件的代码

import { useRef, forwardRef } from "react";

//引入子组件Son
import Son from "./pages/Son";
// 父组件App
function App() {
  // 创建ref对象
  const appRef = useRef(null);
  // 触发Son组件中的sayHello()方法
  const handleClick = () => {
    appRef.current.sayHello();
  };
  return (
    <>
    	// 绑定ref
      <Son ref={appRef} />
      <button onClick={handleClick}>我想调用子组件中的方法</button>
    </>
  );
}

export default App;

代码如下(示例):Son组件的代码(useImperativeHandle 使用了这个hook来暴露方法)

import { forwardRef } from "react";
import { useImperativeHandle } from "react";
// eslint-disable-next-line react/display-name
const Son = forwardRef((props, ref) => {
  useImperativeHandle(ref, () => ({
    // 暴露的方法
    sayHello() {
      console.log("我被父组件调用了");
    },
  }));
  return <div>son</div>;
});

export default Son;

在这里插入图片描述

总结

其实还有很多传值调用的方法,比如使用状态管理工具、Context、父传子,子传父,根据自己需求来做就可以,只是我本人学习心得,如果有啥建议欢迎讨论。

Ref)和React.ForwardRefExoticComponent是什么? React.forwardRef()是一个用于在React组件之间传递refs的函数。它接受一个渲染函数作为参数,并返回一个新的组件,该组件可以将ref传递给其子组件。这个函数通常用于包装具有ref属性的DOM元素或其他React组件,以便在父组件访问子组件的DOM节点或实例。 React.ForwardRefExoticComponent是一个泛型类型,用于定义接收ref的组件类型。它接受一个类型参数,指定组件接受的props类型。通过使用这个类型,我们可以在编译时检查组件如何使用和传递ref。 在示例代码,HtmlComponent是一个使用forwardRef()函数创建的组件,它是一个button元素。它接受props和ref作为参数,并返回一个button元素。这样,我们可以在父组件使用ref属性引用这个button元素。 引用<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [react-frec:这是一个类型库,用于编写简单的“ React.forwardRef”和“ React.ForwardRefExoticComponent”](https://download.csdn.net/download/weixin_42157188/16743008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Java在小程序开发方面的优势及应用](https://download.csdn.net/download/milk416666/88250412)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值