В RTK Query, дублирование практически одинаковых API может быть очень раздражающим и неэффективным. Однако, существует несколько путей для избавления от дублирования кода при определении API в RTK Query.
1. Использование базовой схемы:
RTK Query позволяет определить базовую схему для апи, которая будет использоваться в нескольких местах. Базовая схема включает в себя URL, хедеры, авторизацию и другие общие параметры запроса. Вы можете определить базовую схему с помощью функции baseQuery
. Это позволяет использовать настройки запроса из базовой схемы для всех остальных запросов.
import { createApi, baseQuery } from '@reduxjs/toolkit/query/react'; const api = createApi({ baseQuery: baseQuery({ baseUrl: '/api', headers: { 'Content-Type': 'application/json', }, }), // ... });
2. Использование операций запроса:
RTK Query позволяет определить операции запроса, которые имеют общие параметры и могут быть повторно использованы в разных местах. Операции запроса могут быть определены с помощью функции baseQuery
. После определения операции запроса, вы можете использовать ее в разных местах при определении апи.
import { createApi, baseQuery } from '@reduxjs/toolkit/query/react'; const fetchUsers = baseQuery({ query: () => ({ url: '/users', method: 'GET', }), }); const api = createApi({ endpoints: (builder) => ({ getUsers: builder.query({ query: () => fetchUsers, }), getUserById: builder.query({ // Additional parameters for this query can be added here query: (id: number) => ({ ...fetchUsers.query(), url: `/users/${id}`, }), }), }), });
3. Повторное использование эндпоинтов:
RTK Query позволяет повторно использовать уже определенные эндпоинты при определении других эндпоинтов. Это может быть полезно, если у вас есть несколько эндпоинтов с одинаковым или похожими параметрами запроса.
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; const api = createApi({ baseQuery: fetchBaseQuery({ baseUrl: '/api' }), endpoints: (builder) => ({ getUsers: builder.query({ query: () => ({ url: '/users', method: 'GET' }), }), getAdmins: builder.query({ // Reuse getUsers endpoint query: () => api.endpoints.getUsers.initiate(), }), }), });
4. Использование шаблонов запросов:
В RTK Query можно использовать шаблоны запросов (query templates), которые позволяют определить общие параметры запроса и повторно использовать их в разных эндпоинтах.
import { createApi, fetchBaseQuery, QueryTemplate } from '@reduxjs/toolkit/query/react'; const fetchUser: QueryTemplate<User, number> = (id) => ({ url: `/users/${id}`, method: 'GET', }); const api = createApi({ baseQuery: fetchBaseQuery({ baseUrl: '/api' }), endpoints: (builder) => ({ getUser: builder.query({ query: (id) => fetchUser(id), }), getAdmin: builder.query({ // Reuse fetchUser template query: () => fetchUser(1), }), }), });
Это некоторые из способов, которые можно использовать для избегания дублирования практически одинаковых API в RTK Query. Выберите тот, который лучше всего соответствует вашей конкретной ситуации и поможет сделать ваш код чище и более эффективным.