Обязательно проверьте наличие обновлений ниже.
Оператор распространения повторно вставляет все инородные базы, а затем вы добавляете еще один объект с предполагаемой мутацией.
Я думаю, что вы имеете в виду что-то вроде этого (не проверено)
for (let i = 0; i < state.foreignBases.length; i++) {
if (action.baseUser.created === state.foreignBases[i].baseuser.created) {
let foreignBases = [...state.foreignBases];
foreignBases[i].baseuser = action.baseUser;
return Object.assign({}, state, {foreignBases});
}
}
Обновление : @devserkan напомнил мне, что оператор распространения "не делает глубокого копирования", что в Redux запрещено! Поэтому я искал обновление элемента в официальном шаблоне массива , которое, как мне кажется, применяется следующим образом (опять же, не проверено):
let foreignBases = state.foreignBases.map((foreignBase) => {
if (action.baseUser.created === foreignBase.baseuser.created) {
return {action.baseUser};
} else {
return foreignBase
}
});
return Object.assign({}, state, {
...foreignBase,
baseuser: action.baseUser
});
Обновление 2 : @devserkan в комментариях снова вносит ценный вклад, на этот раз исправляя исходный цикл for, вкладывая его в части объекта состояния. Что похоже на мутацию. Этот подход позволяет избежать этого и позволяет использовать цикл for.
for (let i = 0; i < state.foreignBases.length; i++) {
if (action.baseUser.created === state.foreignBases[i].baseuser.created) {
const newItem = {
...state.foreignBases[i],
baseuser: action.baseUser
};
const newforeignBases = Object.assign([], state.foreignBases, {
[i]: newItem
});
return Object.assign({}, state, { foreignBases: newforeignBases });
}
}