Skip to content

mergeRefs ​

mergeRefs 接收多个 ref(RefObject 或 RefCallback),返回一个能更新所有传入 ref 的单一 ref。当你需要向单个元素同时传递多个 ref 时很有用。当回调 ref 返回清理函数(React 19)时,合并后的 ref 也会返回一个清理函数,并在分离时执行所有清理操作。

接口 ​

ts
function mergeRefs<T>(
  ...refs: Array<RefObject<T> | RefCallback<T> | null | undefined>
): RefCallback<T>;

参数 ​

  • refsrequired · Array<RefObject<T> | RefCallback<T> | null | undefined>

    要合并的 ref 数组。每个 ref 可以是 RefObject 或 RefCallback。

返回值 ​

  • RefCallback<T>

    一个会更新所有传入 ref 的回调 ref。

示例 ​

tsx
forwardRef(function Component(props, parentRef) {
  const myRef = useRef(null);

  return <div ref={mergeRefs(myRef, parentRef)} />;
});
tsx
function Component(props) {
  const ref = useRef(null);
  const [height, setHeight] = useState(0);

  const measuredRef = useCallback(node => {
    if (node == null) {
      return;
    }

    setHeight(node.offsetHeight);
  }, []);

  return <div ref={mergeRefs(measuredRef, ref)} />;
}

基于 MIT 许可证发布。