498 - 《React Refs》

发布于 2024年12月16日

趁着 React 19 正式发布,重新看一遍 Refs,做下笔记。

1、Refs 是逃生舱,允许用户可以,1)访问 DOM 节点,2)保存不需要触发 re-render 的值。比如。

1)DOM 操作。

function TextInput() {
  const ref = useRef(null);
  function handleFocus() {
    inputRef.current.focus();
  }
  return <input ref={ref} />;
}

2)保存不需要触发 re-render 的值。

function Timer() {
  const ref = useRef(null);
  useEffect(() => {
    ref.current = setInterval(fn, 1000);
    return () => clearInterval(ref.current);
  }, []);
}

2、Refs 最佳实践。

1)优先用声明式方案,比如 autofocus vs. ref 。

// 🚫 避免
<div ref={el => el?.focus()} />

// ✅ 使用
<input autoFocus />

2)不要在渲染期间读写 ref。

function MyComponent() {
  // 🚫 避免在渲染时读写 ref
  const value = myRef.current;
  
  // ✅ 在事件处理器中使用
  function handleClick() {
    myRef.current.focus();
  }
}

3)callback refs 优于 useRef + useCallback。

// 🚫
const ref = useRef(null);
use

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。