Должен ли я использовать RTK-запрос для базового URL-адреса или ресурса?
Я работаю в большом проекте с большим количеством базовых URL-адресов и ресурсов, которые мы можем понять как множество различных интегрированных сервисов.
Подключив RTK к моему приложению после строки ресурса (изолированный), у меня есть createApi() для каждого ресурса.
Я следую по этому пути, потому что каждый ресурс имеет все методы CRUD и некоторые собственные, полагая, что у нас будет 10 методов (вызовов) для управления каждым ресурсом И, используя один API создания, я мог бы иметь 200 методов на одном createApi / reducerPath.
пример: (Я думаю, это решит мою проблему)
// users-api.ts
export const usersApi = createApi({
reducerPath: 'usersApi',
baseQuery: httpClientBaseQuery({
baseUrl: 'http://localhost:3000/' // (same base url)
})
// getUsers(), getUser(), getManyUsers() createUser(), updateUser(), ...
})
// cards-api.ts
export const cardsApi = createApi({
reducerPath: 'cardsApi ',
baseQuery: httpClientBaseQuery({
baseUrl: 'http://localhost:3000/' // (same base url)
})
// ...
})
// accounts-api.ts
export const accountsApi = createApi({
reducerPath: 'accountsApi ',
baseQuery: httpClientBaseQuery({
baseUrl: 'http://localhost:3000/' // (same base url)
})
// ...
})
// preferences-api.ts
export const preferencesApi = createApi({
reducerPath: 'preferencesApi',
baseQuery: httpClientBaseQuery({
baseUrl: 'http://localhost:3000/' // (same base url)
})
// ...
})
// templates-api.ts
export const templatesApi = createApi({
reducerPath: 'templatesApi',
baseQuery: httpClientBaseQuery({
baseUrl: 'http://localhost:3000/' // (different base url)
})
// ...
})
...
Из документации RTK:
"createApi(): ядро функциональности RTK Query. Оно позволяет вам определять набор конечных точек, описывающих, как получать данные из серии конечных точек, включая конфигурацию того, как получать и преобразовывать эти данные. В большинстве случаев вы должны использовать это один раз для каждого приложения, как правило, «по одному фрагменту API на базовый URL».
Вопрос: можно ли использовать RTK таким образом (для каждого ресурса)? у меня будут проблемы с производительностью, или это будет неправильно?
1 ответ
Мы рекомендуем, чтобы у вас был один на каждый связанный источник данных - обычно это будет один на домен. Если вы разделите его на несколько вызовов, эти apis не смогут влиять друг на друга, поэтому мутация в одной конечной точке не может автоматически запускать повторную выборку данных с боковым изменением из другой.
Даже если у вас всего один
createApi
вызов, вы все равно можете разделить его на несколько файлов, используя подход разделения кода, используя
injectEndpoints
.
// a central, potentially empty api definition
import { emptySplitApi } from './emptySplitApi'
const extendedApi = emptySplitApi.injectEndpoints({
endpoints: (build) => ({
// adding only this endpoint in this file
example: build.query({
query: () => 'test',
}),
}),
overrideExisting: false,
})
// and exporting the hook to be used from components
export const { useExampleQuery } = extendedApi