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 } ////// /////