У меня есть 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
в соответствии с требуемой ошибкой или состоянием загрузки. Как?
Пожалуйста, найдите правки, добавленные в auth и общие редукторы
вы можете взглянуть на redux-saga github.com/redux-saga/redux-saga
Вам нужно импортировать authActionTypes из authActions и обновить редуктор в generalReducer.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;
}
Надеюсь это поможет.
опубликуйте соответствующий код с представлением проблемы.