1

我使用redux工具包创建API问题很简单:如何动态改变API中的baseUrl?详细问题:这里是createApi方法 一个对象被传递给这个方法,其中一个键是“baseQuery”

export const WebApi = create Api({
reducerPath: 'API',
baseQuery: fetchBaseQuery({ base Url: 'http://localhost:3001/api' }),
endpoints: () => ({}),
});

问题来了,如何动态更改 baseUrl?它在商店里,但我不能把它放在这里。我尝试了自定义查询文档中的解决方案 https://redux-toolkit.js.org/rtk-query/usage/customizing-queries#constructing-a-dynamic-base-url-using-redux-state

但它不允许完全更改 baseUrl,只能动态处理请求本身,这已经在 baseUrl 之后

那么,如何在 createApi 方法中获取和更改 baseUrl 呢?

4

2 回答 2

3

所以,答案是:

就在您在下面创建 api 过去代码的文件中:

const dynamicBaseQuery: BaseQueryFn<string | FetchArgs,
  unknown,
  FetchBaseQueryError> = async (args, WebApi, extraOptions) => {
  const baseUrl = (WebApi.getState() as any).configuration.baseUrl;
  const rawBaseQuery = fetchBaseQuery({ baseUrl });
  return rawBaseQuery(args, WebApi, extraOptions);
};

我使用商店中的 baseUrl,因为我的配置已经在其中。但是您可以在这里进行异步等待获取,以从任何地方获取数据

并将这个常量 dynamicBaseQuery 插入到您 crateApi 中的 baseQuery 键中

export const WebApi = createApi({
  reducerPath: 'API',
  baseQuery: dynamicBaseQuery,
  endpoints: () => ({}),

});
于 2021-10-14T12:21:31.993 回答
0

如果您传入完整的 url(以http://or开头https://fetchBaseQuery将跳过baseUrl并使用提供的 url。因此,您可以使用上面链接的逻辑将当前的 baseUrl 附加到url查询的前面。

于 2021-10-14T10:32:32.290 回答