У меня есть отдельные пользователи, для которых значение энтузиазма может быть уменьшено / уменьшено. После этого я хочу обновить общий уровень энтузиазма (globalEnthusiasmLevel), а также сумму индивидуальных целых чисел энтузиазма (на пользователя).
У меня есть все, что мне нужно знать, чтобы обновить общее значение во время обработки отдельного значения (действие> редуктор), однако я хочу, чтобы это было отдельным действием для практических целей.
export function enthusiasm(state: StoreState, action: UsersAction): StoreState {
let globalEnthusiasmLevel: number;
switch (action.type) {
case INCREMENT_ENTHUSIASM:
state.users = state.users.map((user: UserType) => {
if (user._id === action.payload._id) {
user.enthusiasmLevel = user.enthusiasmLevel + 1;
}
return user;
});
globalEnthusiasmLevel = state.globalEnthusiasmLevel + 1;
return { ...state, globalEnthusiasmLevel };
case DECREMENT_ENTHUSIASM:
const users: UserType[] = state.users.map((user: UserType) => {
if (user._id === action.payload._id) {
globalEnthusiasmLevel = (user.enthusiasmLevel > 0 ) ? state.globalEnthusiasmLevel - 1 : state.globalEnthusiasmLevel;
user.enthusiasmLevel = user.enthusiasmLevel - 1;
user.enthusiasmLevel = Math.max(0, user.enthusiasmLevel);
}
return user;
});
return { ...state, ...users, globalEnthusiasmLevel };
case STORE_USERS:
return { ...state, users: action.payload };
case SET_GLOBAL_ENTHUSIASM:
return { ...state, globalEnthusiasmLevel: action.payload };
default:
return state;
}
- Что было бы наилучшим подходом к отправке действия после акиона?
- разумно ли разделить
STORE_USERS
иSET_GLOBAL_ENTHUSIASM
в другой редуктор?