Синтаксис ...
для распространения будет содержать поверхностную копию объекта, который вы расширяете.Обычно этого достаточно, особенно в Redux, где не следует изменять объект состояния после его создания.Таким образом, ваша функция редуктора может быть просто
const reducer = (state=initialState, action) => {
switch(action.type) {
case 'SET_NAME':
return { ...state, name: action.payload };
default:
return state;
}
}
, что, в свою очередь, эквивалентно
case 'SET_NAME':
return {
// name: state.name,
address: state.address,
phone: state.phone,
contacts: state.contacts,
name: action.payload
};
Старое состояние и новое состояние будут разделять вложенные объекты (вы не получите глубокую копию), но это нормально.
(Если ваши объекты достаточно «мясистые», также рассмотрите редукционную композицию Redux , которая позволяет вам написать отдельный редуктор для каждого из этих подполей и объединить их вместе.)