Проверяет понимание механизма мутаций в RTK Query и умение создавать базовую мутацию для изменения данных на сервере.
RTK Query — это инструмент из Redux Toolkit для работы с серверными данными. Он разделяет операции на два типа: queries (чтение данных) и mutations (изменение данных). Мутации нужны для отправки изменений на сервер: POST, PUT, PATCH, DELETE. В отличие от queries, мутации не выполняются автоматически при монтировании компонента и не кэшируются — их запускают вручную через возвращаемую функцию-триггер.
Мутация определяется внутри createApi в свойстве endpoints через builder.mutation. Обязательно указывается query, который описывает запрос, и invalidatesTags для инвалидации кэша связанных queries.
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
export const api = createApi({
reducerPath: 'api',
baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
tagTypes: ['Post'],
endpoints: (builder) => ({
addPost: builder.mutation({
query: (newPost) => ({
url: '/posts',
method: 'POST',
body: newPost,
}),
invalidatesTags: ['Post'],
}),
}),
});
export const { useAddPostMutation } = api;
Хук useAddPostMutation возвращает кортеж: функцию-триггер и объект состояния. Триггер можно вызвать с аргументом и получить промис с результатом.
function AddPostForm() {
const [addPost, { isLoading, isError }] = useAddPostMutation();
const handleSubmit = async (data) => {
try {
await addPost(data).unwrap();
} catch (err) {
console.error(err);
}
};
return <button onClick={() => handleSubmit({ title: 'Hi' })}>Add</button>;
}
data, error и методом unwrap().invalidatesTags можно автоматически обновить связанные queries.isLoading, isError, isSuccess.Мутации стоит применять везде, где нужно изменить данные на сервере: формы создания, редактирование, удаление. Они упрощают работу с состоянием запроса и синхронизацию кэша без ручного написания thunk-ов.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию