贝利信息

React 中 ref 回调函数接收 null 的原因解析

日期:2025-12-26 00:00 / 作者:心靈之曲

在 react 中,ref 回调函数(如 `ref={el => {...}}`)会在 dom 元素挂载时传入真实节点,卸载时传入 `null`,这是 react 内置的生命周期行为,用于确保 ref 始终准确反映 dom 状态。

当你使用函数式 ref(即 ref={el => inputsRef.current[i] = el})时,React 会在两个关键时机调用该回调

这就是为什么 el 类型为 HTMLInputElement | null —— TypeScript 正确地反映了这一双向生命周期语义。

正确处理 null 的推荐写法

export default function SomeArray() {
  const inputsRef = useRef([]);

  return (
    <>
      {[1, 2, 3].map((_, i) => (
         {
            if (el) {
              // 挂载:安全赋值
              inputsRef.current[i] = el;
            } else {
              // 卸载:清理引用,防止内存泄漏或 stale node
              inputsRef.current[i] = null;
            }
          }}
        />
      ))}
    
  );
}

关键注意事项

简言之,null 不是类型缺陷,而是 React 精确控制 DOM 生命周期的契约体现——尊重它,才能写出健壮、可预测的 ref 管理逻辑。