Весной стартует сезон найма, успей отхватить свой оффер!

Как работает useRef в React?

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

Как работает useRef?

  • Ссылки на DOM элементы. useRef может использоваться для получения прямого доступа к DOM-элементам, например, для фокусировки на поле ввода или измерения размеров элемента.

  • Хранение значений между рендерами. useRef сохраняет значение, которое не вызывает повторный рендер компонента при его изменении. Это полезно, когда нужно хранить данные, которые не должны быть частью состояния компонента, но должны сохраняться между рендерами.

const myRef = useRef(initialValue);
  • initialValue — это начальное значение ссылки. Оно может быть null или любым другим значением, которое вам нужно сохранить.

  • myRef.current — это объект, который хранит текущее значение. Для ссылок на DOM-элементы, myRef.current будет ссылаться на сам элемент.

Пример использования useRef для работы с DOM

import { useRef } from "react";

function FocusInput() {
  const inputRef = useRef(null);

  const focusInput = () => {
    inputRef.current.focus(); // Фокусируемся на поле ввода
  };

  return (
    <div>
      <input ref={inputRef} type="text" />
      <button onClick={focusInput}>Фокус на поле ввода</button>
    </div>
  );
}

В этом примере:

  • inputRef создается с помощью useRef и передается в атрибут ref поля ввода.
  • Когда пользователь нажимает на кнопку, вызывается функция focusInput, которая фокусирует на поле ввода, используя inputRef.current.focus().

Пример использования useRef для хранения значений

import { useRef } from "react";

function Timer() {
  const countRef = useRef(0);

  const increment = () => {
    countRef.current += 1;
    console.log(countRef.current); // Печатает количество обновлений
  };

  return (
    <div>
      <button onClick={increment}>Увеличить</button>
    </div>
  );
}

В этом примере:

  • countRef используется для хранения значения счетчика между рендерами.
  • Значение countRef.current можно изменять напрямую, и это не приведет к повторному рендеру компонента.

Когда использовать useRef?

  • Доступ к DOM-элементам. Если нужно работать с DOM (например, фокусировка, измерения или анимации), используйте useRef для получения ссылок на элементы.
  • Хранение данных между рендерами. Если вам нужно сохранить данные, которые не должны вызывать ререндер, используйте useRef. Например, для хранения текущего состояния таймера или отслеживания предыдущих значений.

Использование useRef:

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