Я хочу сохранить один экземпляр стороннего класса api manager в моем приложении реакции.
Я пытаюсь добиться этого, используя API React Context следующим образом:
Контекст 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 = новый 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, если он обновляется пользователем?
- Как заново создать экземпляр API после перезагрузки страницы, используя
redux-persist
?