> В чем разница useRef и useState в React (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Aston, IT-One
Стек: React
> Пример ответа
Основное различие между useRef и useState в React заключается в том, как они влияют на рендеринг компонента и как хранят данные.
-
useState: возвращает пару[значение, setter]. При вызове setter-функции React обновляет состояние и запускает повторный рендер компонента. Изменение состояния всегда приводит к перерисовке UI. Значение состояния сохраняется между рендерами, но его изменение синхронизируется с жизненным циклом компонента. -
useRef: возвращает объект с свойством.current, который можно изменять напрямую (например,ref.current = newValue). Изменениеref.currentне вызывает повторный рендер. Рефы используются для хранения мутируемых значений, которые не должны влиять на отображение (например, ссылки на DOM-элементы, таймеры, предыдущие значения).
Когда что использовать:
-
Используйте
useState, если изменение данных должно обновлять интерфейс (например, текст инпута, счетчик, список). -
Используйте
useRef, если нужно хранить данные, которые не влияют на рендер (например, идентификаторsetInterval, фокус на элементе, предыдущее значение для сравнения).
Пример:
JSXfunction Component() {const [count, setCount] = useState(0); // изменение -> ререндерconst countRef = useRef(0); // изменение -> НЕТ ререндераconst handleClick = () => {setCount(count + 1); // UI обновитсяcountRef.current += 1; // UI не изменится};}
Ключевой момент: useRef - это "мутабельный контейнер", который не участвует в цикле рендеринга, а useState - реактивное состояние, управляющее отображением.
> Похожие задачи по frontend
Какие тактические шаблоны DDD вы знаете и применяли
Что делают хуки useSelector и useDispatch в Redux
Изменится ли поведение методов при передаче их как пропсов в другой React-компонент
Для чего нужен React.lazy
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью