Я использую Redux (+ thunk) для получения данных из моего API. Я реализовал компонент Data Fetcher, который вызывает все действия и после выполнения отправляет LOADED. В моем фактическом основном компоненте, где я рендерим контент, я жду, пока флаг isLoaded
в реквизитах не будет установлен в true.
Вот метод в сборщике данных:
const fetchData = () => {
if (isAuthenticated) {
const p = [];
p.push(fetchDataSetOne());
p.push(fetchDataSetTwo());
Promise.all(p).then( () => setHasLoaded() );
}
}
Каждый изэти методы извлечения возвращают обещание axios, в котором я отправляю один раз извлеченные данные следующим образом:
export const fetchDataSetOne = () => dispatch => {
return axios.get(`${API_URL}/dataSetOne`)
.then(res => {
dispatch({
type: FETCH_ALL_DATA_SET_ONE,
payload: res.data.docs
});
});
};
В функции рендеринга моего компонента я рендерирую содержимое только при загрузке (которая устанавливается диспетчером LOADED из setHasLoaded
action) примерно так:
{ hasLoaded && <MyContent> }
Несмотря на то, что я «жду» завершения действий (= Promise.all), моя переменная hasLoaded имеет значение true, прежде чем будут установлены выбранные данные. Кто-нибудь может помочь?