React 中的 forwardRef 的理解及用法
官方文档:Refs 转发
语法
React.forwardRef(render);
上面的代码中,forwardRef
函数接收一个名为 render
的函数(也可以将 render 方法理解成一个函数组件),返回值是 react 组件;
const render = (props, ref) => {
return <></>;
}
上面的代码中,render
函数接收 2 个参数,第一个参数为 props(父组件传递的参数对象),第二个参数为 ref (React.createRef()
);
综上所述,就组合成了我们就常见到的写法:
const Button = React.forwardRef((props, ref) {
return <></>;
});
一个完整的简单例子
感觉还是很模糊,举一个例子:
import React from "react";
const App = (props) => {
const btnRef = React.createRef(); // 1
React.useEffect(() => {
console.log(btnRef); // 5
}, [btnRef]);
return (
<Button ref={btnRef}>一个按钮</Button> // 2
);
}
const Button = React.forwardRef((props, ref) => { // 3
return (
<button
ref={ref} // 4
>
{props.children}
</button>
);
});
export default App;
上面代码中,实现了在 App
组件中,返回了一个 Button
组件;以下是详细步骤:
- 创建了一个 ref;
- 将第一步创建的 ref 挂载到
Button
组件上; - 将第二步传入
Button
组件的 ref 作为参数传递进来; - 将 ref 挂载到
button
DOM 节点上; - 画面渲染完成后,控制台打印 btnRef;
总结
值得注意的是:
- 当 ref 属性用于 HTML 元素时,接收底层 DOM 元素作为其 current 属性;
- 当 ref 属性用于自定义 class 组件时,ref 接收组件的挂载实例作为其 current 属性;
- 不能在函数组件上使用 ref 属性,因为他们没有实例;
此时再来理解一下官方的定义:
Ref 转发是一项将 ref 自动地通过组件传递到其一子组件的技巧。对于大多数应用中的组件来说,这通常不是必需的。但其对某些组件,尤其是可重用的组件库是很有用的。
分类:
React
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix