Контекст реагирования: предоставьте экземпляр Api Manager - PullRequest
2 голосов
/ 21 марта 2019

Я хочу сохранить один экземпляр стороннего класса 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 вопроса:

  1. Имеет ли это смысл?
  2. Как мне установить sessionToken, если он обновляется пользователем?
  3. Как заново создать экземпляр API после перезагрузки страницы, используя redux-persist?

1 Ответ

0 голосов
/ 30 марта 2019
  1. Если вы просто хотите использовать один экземпляр ApiManager, тогда я не думаю, что вам нужен Context API.Просто создайте экземпляр и экспортируйте / импортируйте его в нужные вам файлы.
  2. Вы можете обернуть этот сторонний api-менеджер, чтобы добавить некоторые нужные вам методы, например setSessionToken для установки / обновления sessionToken при загрузке приложенияили когда пользователь получает / обновляет его.
  3. Зачем беспокоиться о redux-presist в этом случае (даже если вы решите использовать Context API), если Redux не задействован.Если вы хотите сохранить sessionToken, поэтому храните его в localStorage или любом другом хранилище, которое вам нужно, у него есть простой API для установки / извлечения значений, вам не нужно использовать библиотеку для него.
...