在 React 中,当使用函数作为 ref 时,其核心行为、应用场景和注意事项如下:
一、核心行为(生命周期管理)
// 示例:动态获取输入框引用
<input ref={(node) => {
if (node) node.focus(); // 挂载时触发
else console.log('已卸载'); // 卸载时触发
}} />
二、常见应用场景
三、优缺点对比
四、最佳实践建议
性能优化
使用 useCallback 或 useMemo 缓存函数,避免重复触发:
const refCallback = useCallback((node) => {
if (node) node.focus();
}, []);
return <input ref={refCallback} />;
条件操作
在回调中增加判断逻辑:
<div ref={(node) => {
if (node && node.clientHeight > 500) {
node.style.overflowY = 'scroll';
}
}} />
替代方案
对于简单场景,优先使用 useRef(函数组件)或 createRef(类组件),仅在需要动态控制时使用函数形式。
总结:
函数形式的 ref 提供了动态引用管理能力,特别适合需要根据条件或生命周期阶段操作 DOM 的场景,但需注意代码复杂度和性能影响。