redux RTK查询:从存储设置baseUrl

wkyowqbh  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(106)

我有一个包含商店的应用程序:

const initialState: GlobalState = {
  data: {
    isOnboardingCompleted: 'unknown',
    isEnvironmentReady: false,
    environmentConfig: ProdEnvConfig,
    // ...
  },
}

字符串
environmentConfig包含一个存储baseUrl的对象。环境配置可以在应用程序运行时更改。用户可以选择不同的。
创建API时:

export const BaseApi = createApi({
  reducerPath: 'base-api',
  baseQuery: fetchBaseQuery({
    baseUrl: '',
  }),
  endpoints: builder => ({
    getStudents: builder.query({
      query: param => {
        return "/students"
      },
    }),
  }),
});


如何设置baseUrl,同时侦听environmentConfig的更改并从存储中重新设置baseUrl?
我正在想象一些像这样的伪代码,我似乎无法使其工作:

const listen = () => {
  const config = store.getState().global.data.environmentConfig

  BaseApi.setBaseUrl(config.baseUrl)
}

store.subscribe(listen)


如何实现这一点有什么想法吗?

368yc8dk

368yc8dk1#

我相信你可以围绕fetchBaseQuery函数编写一个小的 Package 器,并传入一个存储在Redux商店中的baseUrl
示例如下:

import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";

const baseQuery = (baseQueryArgs = {}) => async (
  fetchArgs = {},
  api,
  extraOptions = {},
) => {
  const { getState } = api;
  const state = getState();
  const baseUrl = state.baseUrl;

  return fetchBaseQuery({
    ...baseQueryArgs,
    baseUrl,
  })(fetchArgs, api, extraOptions);
};

个字符

相关问题