JS: React

Теория: Хук useRef

Иногда в компонентах нам нужен доступ к DOM-элементам — например, чтобы вызывать методы этого элемента. Элементы DOM не являются частью React, поэтому напрямую в компоненте к ним нет доступа. Но для этого есть хук useRef(), который позволяет получить доступ к таким элементам.

С помощью useRef() можно получить доступ к DOM-элементам, чтобы использовать их в useEffect() или обработчиках событий:

const Input = () => {
  // null — начальное значение
  const inputEl = useRef(null)

  const onButtonClick = () => {
    // `current` указывает на смонтированный элемент `input`
    inputEl.current.focus()
  }

  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Фокус</button>
    </>
  )
}

Значение внутри inputEl появляется после монтирования компонента, но до вызова хуков. Для этого нужно не забывать установить на нужный элемент атрибут ref. С помощью этого атрибута устанавливается связь между хуком и элементом, к которому мы хотим получить доступ.

Другой вариант использования хука useRef() — хранение любых данных между вызовами компонента. Этот хук возвращает обычный объект со свойством current внутри. Единственное отличие этого объекта от создаваемого вручную { current: ... } в том, что хук возвращает один и тот же объект при каждом вызове компонента. По своему поведению useRef() похож на использование обычного свойства внутри классового компонента (this.someproperty).

Ниже пример того, как можно сохранять предыдущее состояние с помощью useRef():

https://codepen.io/hexlet/pen/yLzNYaG

Рекомендуемые программы