Skip to content

useImperativeHandle & forwardRef

用法:

  • 向父组件暴露一个自定义的 ref 句柄
  • 暴露你自己的命令式方法 (通过命令式句柄暴露出来的方法不一定需要完全匹配 DOM 节点的方法)

示例

jsx
import { forwardRef, useRef, useImperativeHandle } from "react";

// forwardRef 允许组件使用 ref 将 DOM 节点暴露给父组件
const CComponent = forwardRef(function CComponent(props, ref) {
  const inputRef = useRef(null);

  useImperativeHandle(
    ref,
    () => {
      return {
        focus() {
          inputRef.current.focus();
        },
        scrollIntoView() {
          inputRef.current.scrollIntoView();
        },
      };
    },
    []
  );

  return <input {...props} ref={inputRef} />;
});
jsx
import { useRef } from "react";
import CComponent from "./CComponent.js";

export default function Form() {
  const ref = useRef(null);

  function handleClick() {
    ref.current.focus();
    ref.current.scrollIntoView();
  }

  return (
    <form>
      <CComponent placeholder="Enter your name" ref={ref} />
      <button type="button" onClick={handleClick}>
        Edit
      </button>
    </form>
  );
}
2025( )
今日 8.33%
本周 42.86%
本月 48.39%
本年 4.11%
Powered by Snowinlu | Copyright © 2024- | MIT License