Concurrent Mode — это механизм, который помогает React делать работу интерфейса более плавной. Он позволяет:
- приостанавливать тяжёлый рендеринг — то есть отрисовку элементов на экране;
- откладывать несрочные обновления, которые могут замедлять интерфейс;
- сначала загрузить то, что важно для пользователя, чтобы его действия обрабатывались мгновенно.
Благодаря этому приложение не зависает, интерфейс остаётся отзывчивым, а разработчику проще его оптимизировать.
Concurrent Mode работает автоматически, его не нужно включать отдельно. React сам считает приоритетными действия пользователя, а всё остальное можно выполнять позже.
Типичные приоритетные действия в React- Ввод текста в <input> или <textarea>;
- Нажатие кнопок и интерактивных элементов (onClick, onSubmit);
- Выбор элементов формы (<select>, переключатели);
- Навигация с клавиатуры (стрелки, табуляция);
- Скролл и прокрутка страницы;
- Основные события мыши и касания на интерактивных элементах.
Все остальные операции, например, фильтрация больших списков или сложные вычисления можно обрабатывать через
хуки useTransition (несрочное обновление) или
useDeferredValue (оптимизация отображения данных).
- Всё, что внутри startTransition, React может выполнить позже, не блокируя экран.
- Всё, что вне startTransition, React считает срочным и показывает сразу — это и есть приоритетное действие.
Пример кода с хуками для приоритета обработки данныхimport { useState, useTransition } from "react";function App() { const [text, setText] = useState(""); // хранит то, что ты вводишь const [isPending, startTransition] = useTransition(); // позволяет делать несрочные обновления return ( <> <input placeholder="Пиши что-нибудь…" onChange={e => startTransition(() => setText(e.target.value))} // обновление текста можно делать несрочно /> <p>Ты написал: {text}</p> // показывает, что введено в поле </> );}Пояснение по коду для новичка- useState("") — создаёт переменную text, где хранится текст из поля ввода.
- useTransition() — создаёт инструмент, который позволяет React выполнять некоторые обновления несрочно, чтобы интерфейс не зависал.
- startTransition(() => setText(e.target.value)) — говорит React: «обнови текст, но если параллельно есть тяжёлые операции, их можно отложить».
- <p>Ты написал: {text}</p> — показывает на экране, что ты набрал.
- Ввод в поле <input> всегда считается приоритетным действием — React покажет его сразу, даже если одновременно выполняются другие тяжёлые операции.