React Context: предоставить экземпляр диспетчера API

Я хочу сохранить один экземпляр стороннего класса менеджера 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 = новый ApiManager({ хост: апихост, базовый URL: апиБасеурл, ключ: apKey, сеансТокен: персистедсессионтокен });

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?
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
178
1

Ответы 1

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

Другие вопросы по теме