微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我应该对每个基本 URL 还是资源使用 RTK 查询?

如何解决我应该对每个基本 URL 还是资源使用 RTK 查询?

我在一个大型项目中工作,其中有很多基本网址资源,我们可以将它们理解为许多不同的集成服务。

资源行(隔离)之后在我的应用程序上插入 RTK,每个资源都有一个 createApi()。

我遵循这条路径是因为每个资源都有所有 CRUD 方法和一些自定义方法,假设我们将有 10 个方法调用)来管理每个资源并且使用单个创建 API,我在单个 createApi/reducerPath 上可以有 200 个方法

示例:(我认为这可以解决我的问题)

// 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 功能的核心。它允许您定义一组端点,描述如何从一系列端点检索数据,包括如何获取和转换该数据的配置。在大多数情况下,您应该为每个应用使用一次,根据经验,“每个基本 URL 一个 API 片”。

问题,这样使用 RTK 可以吗(每个资源)?我会遇到性能问题,还是方法不对?

解决方法

我们建议您应该为每个互连的数据源设置一个 createApi - 通常每个域一个。如果将其拆分为多个 createApi 调用,这些 api 不会相互影响,因此一个端点的突变不会自动触发从另一个 createApi 重新获取横向受影响的数据。>

即使您只有一个 createApi 调用,您仍然可以使用 injectEndpoints 使用 Code splitting 方法将其拆分为多个文件。

// 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。