Должен ли я использовать 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
Другие вопросы по тегам