useRef - itgirlschool/wiki GitHub Wiki

Из названия самого хука уже может быть понятно, что он работает со ссылками. Основное его предназначение заключается в предоставлении доступа DOM для работы с дочерними элементами.

Помните, что само использование useRef не считается хорошим «тоном» и работа с DOM элементами напрямую в React должна происходить только тогда, кода других вариантов не осталось.

Для того, чтобы начать работать с ссылками в функциональных компонентах, React требуется инициализировать хук useRef, передав в него начальное значение.

Пример:


const ref = useRef(initialValue)

После инициализации данный хук вернет ref-объект со свойством current.

Пример:


const ref = useRef(null)

Данная запись говорит нам, что переменная ref будет равна {current: null}, мы получили объект в котором будем храниться значение. Тут может появиться вопрос: А зачем нам тогда вообще нужен useRef, если можно сохранить это же значение в любом объекте? При изменении значения в объекте, используя другие React хуки, происходит неизбежное перерендеривание компонента, в отличие от использования useRef, где такого не происходит.

Как работать с useRef ? Разберем стандартный «кейс» использования useRef. Допустим у нас имеется форма с одним input и кнопкой по клику, на которую мы хотим устанавливать фокус на этот input.

Пример:


function Form() {
  const ref = useRef(null)

  const focus = () => {
    ref.current.focus()
  }

  return (
    <>
      <input ref={ref} />
      <button onClick={focus}>Focus</button>
    </>
  )
}

Мы добавляем ref на элемент input, который будем контролировать. По нажатию на кнопку происходит вызов функции focus(), в которой мы обращаемся через свойство current к самому DOM элементу. Далее воспользуемся DOM API функцией focus() для вызова фокуса на элемент input.

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

Заключение Работа со ссылками в React с использованием useRef – очень удобный способ работы с DOM элементам. Хук useRef не приводит к повторному перерендериванию компонента даже когда происходит изменение данных в нем. C другой стороны злоупотребление работы со ссылками в React компонентах будет вести к нарушению работы в виртуальном DOM, о чем всегда необходимо помнить.

⚠️ **GitHub.com Fallback** ⚠️