47. forwardRef
Пересылка рефов — это техника автоматической передачи рефа через компонент одному из его дочерних элементов.
Icon: ArrowRightCircle (Стрелка вправо)
Описание
Заголовок раздела «Описание»Обычно функциональные компоненты не принимают атрибут ref, так как у них нет экземпляров. forwardRef позволяет вашему компоненту “подставить” реф к внутреннему DOM-узлу.
Mermaid Диаграмма
Заголовок раздела «Mermaid Диаграмма»graph LR Parent[Родитель] -->|ref| Proxy[forwardRef Component] Proxy -->|ref| Inner[Inner DOM Element]Пример использования
Заголовок раздела «Пример использования»import React, { forwardRef, useRef } from 'react';
// Компонент, принимающий refconst CustomInput = forwardRef((props, ref) => ( <div className="input-wrapper"> <label>{props.label}</label> <input ref={ref} {...props} /> </div>));
// Использование в родителеconst Parent = () => { const inputRef = useRef(null);
const focusInput = () => { inputRef.current.focus(); };
return ( <> <CustomInput ref={inputRef} label="Имя пользователя" /> <button onClick={focusInput}>Установить фокус</button> </> );};Когда использовать?
Заголовок раздела «Когда использовать?»- Компоненты UI-библиотек: Кнопки, инпуты, ссылки, которым может понадобиться прямой доступ к DOM для управления фокусом, выделением или измерения размеров.
- Интеграция с DOM-библиотеками: Если вы используете сторонние JS-плагины, которым нужен узел DOM.
- HOC: Пересылка рефа через компоненты высшего порядка.
Помните
Заголовок раздела «Помните»Не стоит злоупотреблять рефами. Большинство задач следует решать через декларативные пропсы и состояние.
🔗 Полезные ссылки
Заголовок раздела «🔗 Полезные ссылки»Практика
Заголовок раздела «Практика»Попробуйте примеры в интерактивном редакторе: