Применение хука useRef для DOM в React

На одном из предыдущих занятий мы упоминали, что наиболее часто рефы применяются для доступа к DOM элементам.

Рефы придут на помощь тогда, когда вам, например, нужно сфокусироваться на элементе, сделать скрол или вычислить его размеры и позицию, а возможно воспользоваться какими-то его методами или свойствами, ведь для таких вещей в React нет встроенных методов.

Давайте посмотрим на примере с инпутом, как это делается. Создадим компонент с инпутом и кнопкой:

return ( <div> <input /> <button>focus</button> </div> );

Для начала, импортируем в компонент useRef:

import { useRef } from 'react';

И заведем реф ref в компоненте. Инициализируем его значением null:

const ref = useRef(null);

Навесим на кнопочку обработчик клика:

<button onClick={handleClick}>focus</button>

Чтобы иметь доступ к инпуту, запишем наш реф ref в атрибут ref инпута. Таким образом, когда React будет создавать DOM узел для этого инпута, он положит ссылку на него в ref.current и мы сможем пользоваться методами инпута:

<input ref={ref} />

И наконец, добавим функцию обработки клика, чтобы при клике на кнопку, на инпут наводился фокус. Теперь мы можем это сделать через реф, в котором лежит ссылка на наш инпут, обратившись к его методу focus:

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

Понажимайте кнопочку и убедитесь, что на инпут наводится фокус.

Возьмите код компонента App, который мы написали на этом уроке и сделайте так, чтобы по клику на кнопку в инпуте кроме наведения фокуса происходило еще и очищение поля ввода. Воспользуйтесь для этого свойством value инпута.



Чат с GPT Компилятор