Вопрос проверяет знание методов работы с реальными DOM-элементами в React
Лучший способ — рефы (refs). В функциональных компонентах используют useRef, в классовых — React.createRef(). Реф даёт прямой доступ к DOM-узлу после его создания.
Создание рефа:
import { useRef } from 'react';
function MyComponent() {
const inputRef = useRef(null);
}Привязка к элементу через ref:
<input ref={inputRef} type="text" />Доступ к DOM:
const focusInput = () => {
inputRef.current.focus(); // Установка фокуса на инпут
};Создание рефа:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.inputRef = React.createRef();
}
}Привязка и использование:
<input ref={this.inputRef} type="text" />
// Где-то в методе:
this.inputRef.current.focus();Пример в классовых компонентах:
<input ref={(el) => { this.inputRef = el; }} />Когда использовать рефы:
Фокусировка, анимации, измерение размеров элемента.
Интеграция с библиотеками (например, D3.js, GreenSock).
Ограничения:
Нельзя передавать рефы как пропсы между компонентами (для этого используется forwardRef).
Избегайте чрезмерного использования
Пример с forwardRef (если нужно передать реф дочернему компоненту):
const Child = React.forwardRef((props, ref) => (
<input ref={ref} {...props} />
));
function Parent() {
const inputRef = useRef();
return <Child ref={inputRef} />;
}