4️⃣POST mutation

⚡ 1) Реализуем добавление новой карточки в колоду

https://redux.js.org/tutorials/essentials/part-7-rtk-query-basics#creating-posts-with-mutationsarrow-up-right

⚡1.1) Подготовим апишку к запросу

cards.api.ts
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
import { baseURL } from "common/api";
import { ArgCreateCardType, FetchCardsResponseType } from "features/cards/services/cards.api.types";

export const cardsApi = createApi({
  reducerPath: "cardsApi",
  baseQuery: fetchBaseQuery({ baseUrl: baseURL, credentials: "include" }),
  endpoints: (build) => {
    return {
      // ...
      addCard: build.mutation<any, ArgCreateCardType>({
        query: (card) => {
          return {
            method: "POST",
            url: "cards/card",
            body: {
              card,
            },
          };
        },
      }),
    };
  },
});

export const { useGetCardsQuery, useAddCardMutation } = cardsApi;

⚡1.2) Сделаем запрос в компоненте

circle-info

❗ Хук, который мы создаем для мутация, в нашем случае useAddCardMutation возвращает массив.

const [addCard, { data, erorr, isLoading }] = useAddCardMutation(); Первый параметр - функция, c помощью которой мы собственно будем делать запрос Второй параметр - объект, в в котором находятся вспомогательные свойства (data, errror, loading и прочее)

Теперь давайте сделаем запрос и убедимся что новая карточка добавилась в колоду 🚀

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

⚡ 1.3) Типизация

⚡1.4) Unwrap / toast

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

⚡ 1.5) Cards UI

  • теперь отрисуем нормально карточки (отмапим данные)

  • добавим стили чтобы хоть чуточку смотрелось красивее добавим стили. Но для для этого создадим в фиче cards папку components, а в ней папку Cards

☝ Подведем промежуточные итоги. Мы научились:

  • делать query запросы

  • делать мутации

  • типизировать данные

  • реагировать на крутилки

При этом не используем axios, не работает с санками, не храним данные которые пришли с сервера в стейте

Last updated