PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Что такое useTransition?

Продвинутые темы

`useTransition` — это хук React 18 для конкурентного рендеринга: он помечает обновление состояния как несрочное (transition), чтобы оно не блокировало срочные обновления вроде ввода.

Проблема

Тяжёлый ре-рендер (фильтрация большого списка) при вводе в поле «тормозит» интерфейс — ввод лагает.

Решение

useTransition разделяет обновления на срочные (ввод) и несрочные (перерисовка списка):

const [isPending, startTransition] = useTransition();
const [query, setQuery] = useState('');
const [list, setList] = useState([]);

function handleChange(e) {
  setQuery(e.target.value);          // срочно — поле обновляется мгновенно
  startTransition(() => {
    setList(filterHugeList(e.target.value)); // несрочно — не блокирует ввод
  });
}
  • isPending — флаг, что transition в процессе (можно показать индикатор).
  • startTransition — оборачивает несрочное обновление.

Что даёт

  • Срочные обновления (ввод, клик) остаются отзывчивыми.
  • Несрочные React может прервать и отложить, не блокируя UI.

useTransition против useDeferredValue

  • useTransition — оборачивает обновление состояния.
  • useDeferredValue — откладывает значение (когда не контролируешь setState).

Коротко для собеседования

useTransition (React 18) помечает обновление как несрочное через startTransition, чтобы тяжёлый ре-рендер не блокировал срочные обновления (ввод). Даёт isPending для индикатора. Аналог для значений — useDeferredValue. Часть конкурентного рендеринга.

Другие вопросы раздела