【发布时间】:2021-11-08 08:40:48
【问题描述】:
我正在尝试创建一个服务类,为整个应用程序提供对外部 Rest api 的公共访问。
我面临的第一个问题是这个外部 api 需要作为一个上下文来使用,所以我的第一个方法是创建一个自定义上下文来使用和配置所有其余的调用。见代码:
export const ApiContext = createContext();
const ApiProvider = ({ children }) => {
const api = externalApiContext();
const get = (url, params) =>
api.get(urlWithParams(`${baseUrl}${url}${admkey}`, params));
const post = (url, body, params = {}, headers = {}) =>
api.post(urlWithParams(`${baseUrl}${url}${admkey}`, params), {
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify(body),
});
const put = (url, body, params = {}, headers = {}) =>
api.put(urlWithParams(`${baseUrl}${url}${admkey}`, params), {
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify(body),
});
const remove = (url, params = {}, headers = {}) =>
api.remove(urlWithParams(`${baseUrl}${url}${admkey}`, params), {
headers: { ...headers, 'Content-Type': 'application/json' },
});
const fetch = (url) => api.get(`${url}`);
return (
<ApiContext.Provider value={{ get, post, put, remove, fetch }}>
{children}
</ApiContext.Provider>
);
};
这很好用。我可以围绕应用程序进行配置和调用。 问题是:每当我进行任何这些调用时,它们都会重新渲染,因为我的上下文似乎发生了变化。
所以我有两个疑问:
- 此代码是否正确,可以提供一个通用位置来提供一个提供外部 Rest api 上下文的上下文?我遗漏了使上下文重新呈现的内容?
另一方面,我正在尝试创建一个服务类,就像这里发布的那样:https://newbedev.com/having-services-in-react-application。但是,在服务类中,不能使用上下文......所以......
- 有没有办法创建一个能够使用外部 Context api 的通用服务类?
提前致谢!
【问题讨论】:
标签: reactjs react-context