Измените состояние «Загрузка» с другого редуктора - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть authReducer с и состояние пользователя. У меня также есть generalReducer с состоянием, связанным с уведомлением об ошибке и загрузкой true / false.

Как мне при загрузке имени входа или другой задачи в отдельном редукторе изменить или создать глобальную переменную состояния loading из одного редуктора, которая относится к другому редуктору?

generalReducer.js

let defaultState = {
    loading: false,
    error: null,
    notification: false,      
};

export default function generalReducer(state = defaultState, action){
switch(action.type){
    case loading:
        return {
          ...state,
          loading: action.payload.isLoading,
        };
     default:
        return state;
     }

authReducer.js

let defaultState = {
    user: {
        displayName: null,
        email: null,
        photoUrl: null,
        isAnonymous: null,
        phone: null,
    }
};

export default function authReducer(state = defaultState, action){
    switch(action.type){
    case LOGIN_BEGIN:
    case LOGOUT_BEGIN:
        return {
            ...state,
        };
    case LOGIN_FAILURE:
    case LOGOUT_FAILURE:
        return {
            ...state,
    };
    case LOGIN_SUCCESS:
    return {
        ...state,
        user: action.payload.user
    };
    default:
    return state;
    }
}

В authReducer.js я хочу иметь возможность установить состояние loading или error в generalReducer в соответствии с требуемой ошибкой или состоянием загрузки. Как?

1 Ответ

0 голосов
/ 10 сентября 2018

Вам необходимо импортировать authActionTypes из authActions и обновить редуктор в общем видеReducer.js

generalReducer.js:

import {
  LOGIN_BEGIN,
  LOGOUT_BEGIN,
  LOGIN_FAILURE,
  LOGOUT_FAILURE,
  LOGIN_SUCCESS,
} from './authActions;

let defaultState = {
    loading: false,
    error: null,
    notification: false,      
};

export default function generalReducer(state = defaultState, action){
switch(action.type){
    case loading:
        return {
          ...state,
          loading: action.payload.isLoading,
        };
    case LOGIN_BEGIN:
    case LOGOUT_BEGIN: {
      return {
        ...state,
        loading: true,
        error: null,
      }
    }
    case LOGIN_FAILURE:
    case LOGOUT_FAILURE: {
      return {
        ...state,
        loading: false,
        error: 'Set Your Error Here',
      }
    }
    case LOGIN_SUCCESS: {
      return {
        ...state,
        loading: false,
        error: null,
      }
    }
     default:
        return state;
     }

Надеюсь, это поможет.

...