В настоящее время у меня есть пара данных выборки API, которые, в свою очередь, требуют данные из предыдущего API для следующих API, чтобы получить необходимые данные, в зависимости от взаимодействия и маршрута. На данный момент я все это связал и хорошо работаю со своими редукторами и действиями. Но мне интересно, как я могу условно получить данные в зависимости от того, доступно ли уже локальное состояние или нет?
Моим идеальным решением было бы использовать локальное состояние, когда пользователь загружает данные в первый раз и не нужно продолжать извлекать данные об их первоначальном экземпляре. Я видел много примеров получения данных из API, но ничего такого, что давало бы пример использования локальных данных (уже извлеченных) из соображений производительности, против необходимости вызывать API каждый раз, когда человек отображает компонент / страницу.
Каков наилучший подход к решению этой ситуации?
Это то, что у меня есть, и мне было интересно, если это хороший подход?
idea.sagas.js
function shouldFetchIdeas() {
const state = store.getState();
if (!state.idea.ideas) {
return true;
} else {
return false;
}
}
export function* fetchIdeas({ payload: organizationId }) {
if (shouldFetchIdeas()) {
try {
const fetchApi = yield axios(
`https://api.getconflux.com/api/v1/public/${organizationId}/ideas`
);
yield put(fetchIdeasSuccess(fetchApi.data.rows));
} catch (error) {
yield put(fetchIdeasFailure(error.message));
}
}
}
export function* onFetchIdeasStart() {
yield takeLatest(IdeasActionTypes.FETCH_IDEAS_START, fetchIdeas);
}
export function* ideaSagas() {
yield all([call(onFetchIdeasStart)]);
}
В настоящее время это работает, но кажется грязным. У меня есть около 3-4 вызовов API, и то, что я показал вам выше, является примером. Есть ли альтернативный или правильный способ использовать локальное состояние без необходимости каждый раз получать данные?
В любом случае, было бы здорово услышать ваши мысли, или если есть лучший способ справиться с этим, или если бы вы могли направить меня к каким-либо решениям или любым примерам.
Заранее спасибо!