sim*_*ont 16 redux-toolkit rtk-query
我使用 redux 工具包创建 API 问题很短:如何动态更改 API 中的 baseUrl?详细问题:这里是 createApi 方法 一个对象被传递给这个方法,其中一个键是“baseQuery”
export const WebApi = createApi({
reducerPath: 'API',
baseQuery: fetchBaseQuery({ baseUrl: 'http://localhost:3001/api' }),
endpoints: () => ({}),
});
Run Code Online (Sandbox Code Playgroud)
那么问题来了,如何动态改变baseUrl呢?它在商店里,但我不能把它放在这里。我尝试了自定义查询文档中的解决方案 https://redux-toolkit.js.org/rtk-query/usage/customizing-queries#constructing-a-dynamic-base-url-using-redux-state
但它不允许精确更改baseUrl,只能动态处理请求本身,该请求已经在baseUrl之后
那么,如何在createApi方法中获取和更改baseUrl呢?
sim*_*ont 22
所以,答案是:
就在您创建 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);
};
Run Code Online (Sandbox Code Playgroud)
我从商店使用baseUrl,因为我的配置已经在里面了。但是您可以在此处进行异步等待获取,以从任何地方获取数据
并将这个常量dynamicBaseQuery插入到baseQuery您的 key 中createApi
export const WebApi = createApi({
reducerPath: 'API',
baseQuery: dynamicBaseQuery,
endpoints: () => ({}),
});
Run Code Online (Sandbox Code Playgroud)
phr*_*hry 13
如果您传入完整的 url(以http://或开头https://),fetchBaseQuery将跳过baseUrl并使用提供的 url。因此,您可以使用上面链接的逻辑将当前的 baseUrl 添加到url查询的前面。
| 归档时间: |
|
| 查看次数: |
11075 次 |
| 最近记录: |