【发布时间】:2019-08-12 11:59:10
【问题描述】:
我想在我的 react 应用程序中保留一个第三方 api 管理器类的实例。
我正在尝试使用这样的 React Context Api 来实现这一点:
API 上下文:
import * as React from "react";
import { ApiManager } from "../ApiManager";
const defaultValue = new ApiManager()
const ApiContext = React.createContext(defaultValue);
const ApiProvider = ApiContext.Provider;
const ApiConsumer = ApiContext.Consumer;
const withApi = (enhanced) => {
return (
<ApiConsumer>
{api => enhanced }
</ApiConsumer>
)
}
export default ApiContext;
export {ApiContext, ApiProvider, ApiConsumer, withApi};
在我的客户中,我会这样做:
const api = new ApiManager({ 主机:apiHost, baseUrl: apiBaseUrl, 密钥:apKey, sessionToken:persistedSessionToken });
ReactDOM.hydrate(
<Provider store={store}>
<PersistGate loading={<h1>loading...</h1>} persistor={persistor}>
<BrowserRouter>
<ApiProvider value={api}>
<Main />
</ApiProvider>>
</BrowserRouter>
</PersistGate>
</Provider>, document.querySelector('#app')
);
我有 3 个问题:
- 这有意义吗?
- 如果 sessionToken 被用户更新,我将如何设置它?
- 如何在使用
redux-persist重新加载页面后重新水化 api 实例?
【问题讨论】:
标签: reactjs typescript react-context redux-persist