Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме ReactВсе вопросы
ReactJuniorТеория

Что такое useRef и когда его стоит использовать вместо useState?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

useRef возвращает мутируемый объект {current}, изменение которого не вызывает ре-рендер. Используется для хранения ссылок на DOM-узлы, сохранения значений между рендерами без ререндера, и хранения предыдущих значений.

Три сценария использования

1. Доступ к DOM-узлу

import { useRef } from 'react';

export function SearchInput() {
  const inputRef = useRef<HTMLInputElement>(null);

  function handleClick() {
    inputRef.current?.focus(); // прямой вызов DOM API
  }

  return (
    <>
      <input ref={inputRef} type="text" placeholder="Поиск..." />
      <button onClick={handleClick}>Фокус</button>
    </>
  );
}

2. Хранение значения между рендерами без ре-рендера

import { useRef, useEffect } from 'react';

export function Timer() {
  const intervalId = useRef<ReturnType<typeof setInterval> | null>(null);

  useEffect(() => {
    intervalId.current = setInterval(() => console.log('tick'), 1000);
    return () => {
      if (intervalId.current) clearInterval(intervalId.current);
    };
  }, []);

  function stop() {
    if (intervalId.current) clearInterval(intervalId.current);
  }

  return <button onClick={stop}>Стоп</button>;
}

3. Хранение предыдущего значения

import { useRef, useEffect } from 'react';

function usePrevious<T>(value: T): T | undefined {
  const ref = useRef<T | undefined>(undefined);
  useEffect(() => {
    ref.current = value; // Обновляем после рендера
  });
  return ref.current; // Возвращает значение до текущего рендера
}

export function Counter({ count }: { count: number }) {
  const prev = usePrevious(count);
  return <p>Было: {prev}, стало: {count}</p>;
}

Что такое useRef

useRef(initialValue) возвращает объект { current: T }, который живёт всё время жизни компонента. Ключевое отличие от useState: изменение ref.current не вызывает повторного рендера.

useRef vs useState — когда что использовать

  • useState: значение отображается в UI и его изменение должно обновить экран.
  • useRef: значение нужно только для логики (ID таймера, прошлые данные, DOM-элемент), отображать его не нужно.

Частые паттерны

// Avoid stale closure в обработчике
import { useRef, useCallback } from 'react';

function useLatestCallback<T extends (...args: unknown[]) => unknown>(fn: T) {
  const ref = useRef(fn);
  ref.current = fn; // Всегда актуальная версия
  return useCallback((...args: Parameters<T>) => ref.current(...args), []);
}

Подводные камни

  • Чтение ref.current во время рендера: ref.current может быть null при первом рендере (до монтирования). Доступ к DOM-ref безопасен только в эффектах и обработчиках событий.
  • Мутация ref не обновляет UI: если нужно отобразить значение — используйте useState; хранение счётчика в ref и попытка показать его в JSX не сработает.
  • Передача ref как обычного пропа: до React 19 ref не передаётся через пропы — нужен forwardRef.
  • Инициализация с new Date(): если передать useRef(expensiveComputation()), функция вызывается при каждом рендере (только результат игнорируется) — используйте ленивую инициализацию через хук или useMemo.
  • ref.current = null при размонтировании: React обнуляет ref после размонтирования, поэтому всегда проверяйте ref.current перед использованием.

Частые вопросы на собеседовании

  • Что такое хук useEffect и как работает его массив зависимостей?
  • Объясните хук useState. Какие типичные ошибки возникают при обновлении состояния?
  • Объясните правила хуков. Почему хуки нельзя вызывать условно?
  • В каких типах frontend-проектов React даёт реальный выигрыш, а где будет избыточен или неудачен?

Типичные ошибки

  • Хранить в ref визуально важное значение и удивляться, что UI не обновляется.
  • Читать DOM-ref во время render-фазы.
  • Дублировать useState и useRef для одного значения «на всякий случай».

Что проверяет интервьюер

  • Может ли назвать оба основных применения рефов.
  • Знает ли, что присваивание ref не вызывает рендер.
  • Понимает ли изменение API ref в React 19.

Как вы знаете этот вопрос?

Проверить себя по теме React →

Источники

  • https://react.dev/reference/react/useRef
  • https://react.dev/learn/referencing-values-with-refs
←Предыдущий вопросЧто такое Suspense в React? Как он работает с lazy loading и получением данных?Следующий вопрос→Что такое Virtual DOM и как React использует его для оптимизации рендеринга?

Связанные темы

Reactdom-accessreact-hooks

Вакансии с этим навыком

React вакансии
  • Lead Fullstack Engineer (React+Next.js) (#5392)
  • Full-stack Technical Lead (Java+React) (#5710)
  • Senior Full Stack Engineer (Java, Python, React) (#5444)
  • Middle/Senior Full-Stack Python Engineer (Django) (#5841)
  • Senior Full Stack Mobile Developer (#5704)