React.forwardRef является механизмом, который позволяет передавать ссылку на ref объекта от компонента высшего порядка (Higher-Order Component) или пользовательского компонента к дочернему компоненту.
Основной мотивацией создания React.forwardRef было обеспечить поддержку ref передачи через компоненты с неявным или изменяющимся набором дочерних компонентов. Перед появлением этой функции, передача ref между компонентами была довольно неудобной и требовала более сложных манипуляций с проксированием ref через промежуточные компоненты.
Использование React.forwardRef может быть полезно в следующих случаях:
1. Референс находится в компоненте высшего порядка (HOC) или пользовательском компоненте, и мы хотим передать ref на дочерний компонент.
2. Референс используется в компоненте, который оборачивается в другой компонент (например, библиотекой компонентов или контейнером) и мы хотим изолировать API и передать ref на "внутренний" компонент.
Рассмотрим пример для лучшего понимания:
import React, { forwardRef } from "react"; // Компонент-потомок const ChildComponent = forwardRef((props, ref) => { return <div ref={ref}>Содержимое дочернего компонента</div>; }); // Компонент-родитель const ParentComponent = () => { const ref = React.createRef(); // Используем референс в родительском компоненте const handleClick = () => { console.log(ref.current); }; return ( <div> <ChildComponent ref={ref} /> <button onClick={handleClick}>Вывести ref</button> </div> ); };
В этом примере, мы используем React.forwardRef для передачи ref из ParentComponent в ChildComponent. ChildComponent получает второй аргумент ref
, который мы передаем в компонент div.
Таким образом, мы можем получить доступ к DOM-узлу ChildComponent из ParentComponent, используя референс. Это позволяет нам работать с императивными методами, изменять стиль или делать другие манипуляции с дочерним компонентом.
React.forwardRef делает работу с ref более прозрачной и удобной, и он предоставляет единый и чистый способ передачи ref между компонентами React.