Test
function combineReducers(reducers) {
function totalReducer(totalState = {}, action) {
const newTotalState = {} //объект, который будет хранить только новые состояния дочерних редьюсеров
//цикл + квадратные скобочки позволяют написать код, который будет работать с любыми количеством дочерных редьюсеров
for (const [reducerName, childReducer] of Object.entries(reducers)) {
const newState = childReducer(totalState[reducerName], action) //запуск дочернего редьюсера
if (newState !== totalState[reducerName]) { //если он отреагировал на action
newTotalState[reducerName] = newState //добавляем его в newTotalState
}
}
//Универсальная проверка на то, что хотя бы один дочерний редьюсер создал новый стейт:
if (Object.values(newTotalState).length) {
return { ...totalState, ...newTotalState } //создаем новый общий стейт, накладывая новый стейты дочерних редьюсеров на
старые
}
return totalState //если экшен не был понят ни одним из дочерних редьюсеров, возвращаем общий стейт как был.
}
return totalReducer
}
//////
/////