是否可以使用外部 SDK 或数据获取库(例如 Kitsu 和 RTK Query/Redux Toolkit)?

Nir*_*osh 3 redux redux-toolkit rtk-query

根据RTK 查询文档,我可以创建如下查询:

export const projectsApi = createApi({
  reducerPath: 'projects',
  baseQuery: fetchBaseQuery({
    baseUrl: "https://some-site.com/api/",
    prepareHeaders: (headers) => {
      headers.set('Authorization', `Bearer ${accessToken}`);

      return headers;
    },
  }),
  tagTypes: ['Project'],
  endpoints: (builder) => ({
    fetchProjects: builder.query<Project[], void>({
      query: () => ({ url: `projects` }),
    }),
  }),
});
Run Code Online (Sandbox Code Playgroud)

以上按预期工作。但是,如果想使用像Kitsu这样的外部库来获取和转换数据,我会收到以下错误:

RTK查询错误

这是我在使用 Kitsu 时更新的代码:

export const projectsApi = createApi({
  reducerPath: 'projects',
  baseQuery: fetchBaseQuery({
    baseUrl: "https://some-site.com/api/",
  }),
  tagTypes: ['Project'],
  endpoints: (builder) => ({
    fetchProjects: builder.query<Project[], void>({
      query: api.get('projects'),
    }),
  }),
});
Run Code Online (Sandbox Code Playgroud)

下面是api函数的代码:

const kitsu = (accessToken: string) => {
  return new Kitsu({
    baseURL: "https://some-site.com/api/",
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${accessToken}`,
    },
  });
};

const api = kitsu("ey....");
Run Code Online (Sandbox Code Playgroud)

是否可以使用 Kitsu 或任何第 3 方软件包提供的函数覆盖 RTK Query/Redux Toolkit 的baseQuery函数?

mar*_*son 5

是的,这里有几个选项:

  • 您可以创建自己的函数来实现“基本查询”行为,并将其用作baseQueryAPI 切片的选项
  • 您可以通过为各个端点提供一个queryFn选项来覆盖它们,该选项可以是任何获取某些数据并以正确格式返回数据的异步函数。

有关如何执行这两项操作的说明,请参阅RTK 查询预览文档中的“自定义查询”页面。

  • RTK-Query 为此目的导出 `fakeBaseQuery`,但您的实现同样很好;) (3认同)