У меня есть компонент, который требует некоторых данных из API. Назовем это Компонент A . Первоначально я бы сделал вызов API непосредственно из этого компонента при монтировании, а затем сохранял бы полученные данные в состоянии компонента.
Теперь у меня есть другая часть моего приложения, которая нуждается в тех же данных - давайте назовем ее Компонент B . Я решил, что имеет смысл хранить эти данные в глобальном состоянии приложения, чтобы оба эти компонента могли получить к нему доступ. Одним из преимуществ этого является то, что данные могут быть получены один раз при загрузке моего приложения, а затем повторно использованы без дополнительных вызовов API при монтировании каждого компонента.
Я полагаю, что могу сделать это одним из двух способов:
Вариант 1) Я мог бы создать компонент, который обертывает мое приложение и отвечает за выполнение вызовов API, которые гидратируют мое глобальное состояние при монтировании. . Это будет выглядеть так (InitialAPICalls
):
const App = () => (
<Provider store={store}>
<Router history={history}>
<InitialAPICalls>
<Layout />
</InitialDataProvider>
</Router>
</Provider>
);
, а затем InitialAPICalls
может содержать что-то вроде этого, где это действия, предоставленные как реквизиты через mapDispatchToProps
:
componentDidMount() {
this.props.fetchFooResources();
this.props.fetchBarResources();
}
Вариант 2) Я мог бы создать функцию, которая отправляет все необходимые действия, используя хранилище напрямую, после создания моего компонента приложения. Он хотел бы этого:
const App = () => (
<Provider store={store}>
<Router history={history}>
<Layout />
</Router>
</Provider>
);
const dispatchInitialActions = () => {
store.dispatch(fetchFooResources());
store.dispatch(fetchBarResources());
};
dispatchInitialActions();
ReactDOM.render(<App />, document.getElementById('root'));
Обратите внимание, что это приложение имеет серверную часть Django, и SSR мне не подходит.