В чем разница между RTK и RTK Query

Ответ

RTK (Redux Toolkit) — это набор инструментов для работы с Redux, упрощающий его настройку и использование (например, createSlice, configureStore).

RTK Query — это надстройка над RTK, предназначенная для управления серверным состоянием (API-запросы, кэширование, инвалидация).

Ключевые различия:

  1. Назначение: RTK — для клиентского состояния, RTK Query — для синхронизации с сервером.
  2. Сложность: RTK Query автоматизирует загрузку данных, кэширование, обновления, тогда как в RTK это нужно делать вручную.
  3. Код:
// RTK (обычный Redux)
const postsSlice = createSlice({
  name: 'posts',
  initialState: [],
  reducers: { /* Ручная логика */ }
});

// RTK Query (автоматизация API)
const api = createApi({
  endpoints: (build) => ({
    getPosts: build.query({ query: () => '/posts' }),
  }),
});

Когда что использовать:

  • RTK: сложное клиентское состояние (например, форма с множеством полей).
  • RTK Query: работа с API (CRUD, кэширование).

Можно использовать вместе в одном проекте!

Ответ 18+ 🔞

А, ну вот, опять про эти ваши инструменты для состояния! RTK и RTK Query, блядь. Слушай, представь, ты строишь дом.

RTK — это как твой личный, ебаный, склад с инструментами. У тебя там гвозди, молотки, шурупы, уровень. Всё разложено по коробочкам, подписано. Ты сам решаешь, когда и какой гвоздь забить, куда какую доску прикрутить. Это твоё клиентское хозяйство. createSlice — это ты завёл новую коробку, подписал "Гвозди оцинкованные" и сложил туда логику, как их использовать. configureStore — это ты собрал все коробки в один большой шкаф и поставил его в гараже. Всё под контролем, но и возни, блядь, дохуя.

RTK Query — это, сука, магическая доставка стройматериалов прямо на объект. Ты просто звонишь и говоришь: "Мне десять мешков цемента". А тебе отвечают: "Окей, чувак, уже везем. Кстати, у тебя от прошлого заказа ещё полмешка в углу валяется, свежий, можешь пока его использовать. Новый привезём, старый автоматически выкинем, не парься". И они сами следят, чтобы у тебя не было просроченного цемента, сами обновляют запасы. Это чисто для общения с сервером-поставщиком.

Короче, в чём разница, на пальцах:

  1. Задача: RTK — для внутренней кухни в твоём приложении (что нажал пользователь, что куда перетащил). RTK Query — исключительно для походов на сервер за данными и обратно.
  2. Геморрой: С RTK Query его, в рот меня чих-пых, на овердохуища меньше. Не нужно писать экшены, редьюсеры, санки для загрузки, обработки ошибок и кэширования. Всё из коробки, ёпта!
  3. Код, смотри, как отличается:
// RTK (Делаем всё сами, как честные крестьяне)
const postsSlice = createSlice({
  name: 'posts',
  initialState: { data: [], loading: false, error: null }, // Сам объявляю, сам слежу
  reducers: {
    fetchPostsStart(state) { state.loading = true; }, // Ой, всё, начинаю грузить!
    fetchPostsSuccess(state, action) { state.data = action.payload; state.loading = false; }, // Ура, пришли!
    fetchPostsFailure(state, action) { state.error = action.payload; state.loading = false; } // Бля, всё пропало!
  }
});
// И это ещё санку писать надо, где fetch вызывается... Ну ёбта, заебался уже.

// RTK Query (Волшебный пендель)
const api = createApi({
  baseQuery: fetchBaseQuery({ baseUrl: '/' }),
  endpoints: (build) => ({
    getPosts: build.query({
      query: () => '/posts', // Всё. Сказал куда сходить.
    }),
    // А он сам тебе вернёт { data, error, isLoading, refetch } — живи, радуйся.
  }),
});

Так когда что брать?

  • RTK: Когда у тебя в приложении своя, хитрая логика. Сложная форма, которую нужно валидировать, состояние перетаскивания элементов, всякие модалки-попапы — тут твой склад инструментов рулит.
  • RTK Query: Как только речь зашла про "нужно сходить на бэкенд, что-то получить, создать, обновить" — сразу хватаешь эту магическую палочку. Кэширование, инвалидация, повторные запросы — он за тебя всё сделает, пидарас шерстяной.

И главное — их можно, сука, использовать вместе! В одном проекте. RTK Query под капотом сам использует RTK. Так что можешь в одном месте (configureStore) запихнуть и свой склад для клиентских дел, и эту умную доставку для серверных. Красота, блядь!