Проверяет понимание кэширования и инвалидации данных в RTK Query при редактировании сущностей и возврате к списку.
RTK Query хранит результаты запросов в нормализованном кэше и переиспользует их между компонентами. Когда вы редактируете сущность через mutation, сервер обновляется, но кэш списка, загруженного ранее, остаётся прежним. При возврате к списку компонент берёт данные из кэша и показывает устаревшую информацию.
RTK Query использует систему тегов для связи query и mutation. Query помечает данные тегами через providesTags, а mutation сообщает, какие теги устарели, через invalidatesTags. После успешной mutation соответствующие запросы автоматически перезапрашиваются.
const api = createApi({
baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
tagTypes: ['Item'],
endpoints: (builder) => ({
getItems: builder.query({
query: () => '/items',
providesTags: ['Item'],
}),
updateItem: builder.mutation({
query: (item) => ({ url: `/items/${item.id}`, method: 'PUT', body: item }),
invalidatesTags: ['Item'], // список будет перезапрошен
}),
}),
});invalidatesTags в mutation — кэш остаётся stale.refetch вместо декларативной инвалидации.Более точный подход — теги с id: providesTags: (result) => result.map(i => ({ type: 'Item', id: i.id })) и invalidatesTags: (result, error, arg) => [{ type: 'Item', id: arg.id }]. Это обновит только затронутые записи.
Итог: применяйте теги с инвалидацией, чтобы список всегда отражал актуальные данные после редактирования, избегая ручных перезапросов и рассинхронизации UI.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию