Можно ли использовать hasFetched с флагом isFetching в избыточном состоянии? - PullRequest
0 голосов
/ 09 мая 2018

Я новичок в редуксе 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, так как приложение перенаправляло бы на страницу входа в систему до завершения выборки.

Это нормальный способ обработки моего избыточного состояния во всем приложении? Есть ли другие модели?

...