0Pricing
React Academy · Урок

useOptimistic для мгновенной обратной связи

Показывайте оптимистичные обновления интерфейса, пока серверная мутация выполняется, используя useOptimistic.

«useOptimistic для мгновенной обратной связи» — бесплатный урок React Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Добро пожаловать

В этом уроке Вы используете хук useOptimistic из React 19, чтобы мгновенно отображать оптимистичные изменения интерфейса во время выполнения мутации на сервере, с автоматическим откатом при ошибке.

Что такое оптимистичный интерфейс?

Оптимистичный интерфейс предполагает, что мутация на сервере завершится успешно, и сразу обновляет интерфейс, не дожидаясь ответа сервера. Если операция завершается ошибкой, состояние возвращается к предыдущему.

Основы useOptimistic

useOptimistic принимает фактическое состояние и функцию обновления. Он возвращает оптимистичное состояние и функцию для применения оптимистичных обновлений.
'use client';
import { useOptimistic } from 'react';

const [optimisticLikes, addOptimisticLike] = useOptimistic(
  likes,                      // actual state from server
  (state, newLike) => [...state, newLike] // how to apply optimistic update
);

Пример кнопки «Нравится»

Когда пользователь нажимает «Нравится», сразу покажите новый лайк в интерфейсе с помощью addOptimisticLike, а затем отправьте фактический запрос. Если запрос завершится ошибкой, оптимистичное состояние автоматически вернётся к фактическому.
async function handleLike() {
  addOptimisticLike({ id: Date.now(), user: currentUser });
  await likePost(postId); // server action
}

Где хранится оптимистичное состояние

optimisticLikes показывает оптимистичное значение во время перехода. После ответа сервера и обновления фактического состояния `likes` (через повторную проверку данных) useOptimistic автоматически синхронизирует его с фактическим состоянием.

Индикатор ожидания для оптимистичных элементов

Визуально отмечайте оптимистичные элементы (например, слегка уменьшайте их яркость), чтобы пользователи понимали, что они ожидают подтверждения. В оптимистичное обновление можно добавить флаг `pending: true` и соответствующим образом настроить стили.
const [optimisticMessages, addOptimistic] = useOptimistic(
  messages,
  (state, msg) => [...state, { ...msg, pending: true }]
);

// Render
{optimisticMessages.map(m => (
  <div key={m.id} style={{ opacity: m.pending ? 0.6 : 1 }}>{m.text}</div>
))}

Использование внутри перехода

useOptimistic работает только внутри перехода React (startTransition или useTransition). При использовании серверных действий с React 19 это обрабатывается автоматически.
'use client';
import { startTransition } from 'react';

const handleSubmit = (data) => {
  startTransition(async () => {
    addOptimistic(data);
    await serverAction(data);
  });
};

Пример отправки сообщения в чате

Сразу показывайте отправленное сообщение в списке чата, пока сервер сохраняет его. Сообщение мгновенно появляется со статусом «Отправка...», а после подтверждения сервера меняется на «Отправлено».

Поведение при откате после ошибки

Если серверное действие завершается ошибкой (выбрасывает исключение или отклоняет промис), useOptimistic автоматически отбрасывает оптимистичное значение и возвращается к последнему фактическому состоянию. Реализовывать откат вручную не нужно.

useOptimistic и ручные оптимистичные обновления

До появления useOptimistic Вы управляли двумя переменными состояния (фактической и оптимистичной) и вручную выполняли откат в блоке catch. useOptimistic объединяет это в один хук с автоматическим откатом.

Быстрая проверка

Что происходит с оптимистичным состоянием, если вызвавшее его серверное действие завершается ошибкой?

Повторение

useOptimistic(actualState, updater) возвращает [optimisticState, addOptimistic]. Вызовите addOptimistic перед серверным действием, чтобы мгновенно отобразить изменение. При ошибке действия React автоматически выполняет откат. Хук работает внутри переходов React.

Курс завершён

Поздравляем! Вы завершили курс **Серверные компоненты и возможности React 19**. Теперь Вы понимаете RSC, хук use(), действия, useActionState и useOptimistic, необходимые для современной разработки на React.

Часто задаваемые вопросы

Урок «useOptimistic для мгновенной обратной связи» бесплатный?

Да — полный текст урока «useOptimistic для мгновенной обратной связи» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «useOptimistic для мгновенной обратной связи»?

Показывайте оптимистичные обновления интерфейса, пока серверная мутация выполняется, используя useOptimistic. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «useOptimistic для мгновенной обратной связи»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Компоненты React на сервере
  2. Хук use() для асинхронных ресурсов
  3. Действия React и useActionState
  4. useOptimistic для мгновенной обратной связи
← Назад к React Academy