Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Redux: RTK Query, optimistic updates, Redux Toolkit, cache, mutation

Как организовать оптимистичные обновления (optimistic updates) при работе с RTK Query?

Вопрос проверяет понимание механизма оптимистичных обновлений в RTK Query для улучшения пользовательского опыта при работе с асинхронными запросами.

Короткий ответ

Оптимистичные обновления в RTK Query позволяют сразу обновить интерфейс до получения ответа от сервера, что делает приложение более отзывчивым. Для этого используется опция `onQueryStarted` в мутации, где можно применить `patchQueryResult` для временного изменения кэша. Если запрос завершается ошибкой, изменения откатываются с помощью `undo`. Это особенно полезно для операций, которые почти всегда успешны, например, лайков или добавления в избранное.

Длинный ответ

Что такое оптимистичные обновления?

Оптимистичные обновления — это техника, при которой интерфейс обновляется сразу после действия пользователя, не дожидаясь ответа от сервера. Это создает ощущение мгновенной реакции и улучшает UX. В случае ошибки изменения откатываются, и пользователь видит актуальное состояние.

Реализация в RTK Query

RTK Query предоставляет встроенную поддержку оптимистичных обновлений через колбэк onQueryStarted в определении мутации. Внутри этого колбэка можно использовать patchQueryResult для временного изменения данных в кэше, а затем откатить их при ошибке.

Пример кода

import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

const api = createApi({
  baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
  endpoints: (builder) => ({
    updatePost: builder.mutation({
      query: ({ id, ...patch }) => ({
        url: `posts/${id}`,
        method: 'PATCH',
        body: patch,
      }),
      onQueryStarted: async ({ id, ...patch }, { dispatch, queryFulfilled }) => {
        // Оптимистичное обновление
        const patchResult = dispatch(
          api.util.updateQueryData('getPost', id, (draft) => {
            Object.assign(draft, patch);
          })
        );
        try {
          await queryFulfilled;
        } catch {
          // Откат при ошибке
          patchResult.undo();
        }
      },
    }),
  }),
});

Ключевые моменты

  • updateQueryData — функция для изменения кэша, возвращает объект с методом undo.
  • Важно обрабатывать ошибки, чтобы откатить изменения и, возможно, показать уведомление.
  • Подходит для операций, где вероятность ошибки мала, например, лайки, редактирование текста.

Вывод

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Redux

    Redux

  • React

    React

Ключевые слова

#RTK Query

#optimistic updates

#Redux Toolkit

#cache

#mutation

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию