欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > React中forwardRef()的作用?

React中forwardRef()的作用?

2025/5/3 2:17:10 来源:https://blog.csdn.net/qq_48076747/article/details/142140723  浏览:    关键词:React中forwardRef()的作用?

文章目录

  • 前言
  • 一、forwardRef( )有啥用?
  • 二、使用步骤
    • 1.不分模块组件调用
    • 2.分模块组件调用
  • 总结


前言

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、父传子,子传父,根据自己需求来做就可以,只是我本人学习心得,如果有啥建议欢迎讨论。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词