Я новичок в редуксе thunk и использую его для вызова создателя действий, который отправляет запрос в API, чтобы проверить, вошел ли пользователь в систему. Если пользователь не вошел в систему, я хочу перенаправить на страницу входа. , Я хочу, чтобы компонент загрузчика отображался во время выборки пользователя, а также дождался его выборки, прежде чем перенаправлять или показывать компонент страницы. Так выглядит мой пользовательский редуктор.
//User reducer
export default (state = { isFetching: false, hasFetched: false }, action) => {
switch (action.type) {
case GET_USER_REQUEST:
return { ...state, isFetching: true };
case GET_USER_SUCCESS:
return {
...state,
...action.payload,
isFetching: false,
hasFetched: true
};
case GET_USER_FAILURE:
return {
...state,
...action.payload,
isFetching: false,
hasFetched: true
};
default:
return state;
}
};
Затем я могу использовать простую функцию ниже, чтобы проверить, готово ли пользовательское состояние:
const isStateReady = state => {
return !state.isFetching && state.hasFetched;
};
У меня были проблемы без флага hasFetched, так как приложение перенаправляло бы на страницу входа в систему до завершения выборки.
Это нормальный способ обработки моего избыточного состояния во всем приложении? Есть ли другие модели?