Зачем нужен React.forwardRef?

В документации есть такой пример:

import { forwardRef } from 'react';

const MyInput = forwardRef(function MyInput(props, ref) {
  const { label, ...otherProps } = props;
  return (
    <label>
      {label}
      <input {...otherProps} ref={ref} />
    </label>
  );
});


Это позволяет родительскому компоненту Form получить доступ к DOM-элементу .

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

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

  return (
    <form>
      <MyInput label="Enter your name:" ref={ref} />
      <button type="button" onClick={handleClick}>
        Edit
      </button>
    </form>
  );
}


Почему нельзя просто передать ссылку ref как параметр с другим именем myRef через пропсы? Вот так тоже вроде работает:

const MyInput = function MyInput(props) {
  const { label, myRef, ...otherProps } = props;
  return (
    <label>
      {label}
      <input {...otherProps} ref={myRef} />
    </label>
  );
};


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

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

  return (
    <form>
      <MyInput label="Enter your name:" myRef={ref} />
      <button type="button" onClick={handleClick}>
        Edit
      </button>
    </form>
  );
}


Не заметил никаких глюков. В чем подвох?

upd:

Возможно, есть отличие. Нужна проверка ref.current, он иногда может быть null и появляется ошибка. Ошибка появляется не всегда. Не понятно, связано ли это со ссылкой myRef.
if (ref.current) {
    ref.current.focus();
}
  • Вопрос задан
  • 403 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы