Я создаю новое действие в магазине Redux. У меня есть список предметов, все из которых имеют свойство «overlayVis». Я хочу установить все из них в true, кроме указанного Id. Моя текущая реализацияНесколько обновлений для массива в редукторе redux
case ITEM_OVERLAY_TOGGLE:
// object to be updated and returned
var returnObj = state.data;
state.data.map((item) => {
if (item.id === action.id) {
returnObj = Object.assign({}, ...state, {
data: [
...state.data.slice(0, item.id),
Object.assign({}, ...state.data[item.id], {overlayVis: false}),
...state.data.slice(item.id + 1)]
});
} else if (!item.overlayVis) {
returnObj = Object.assign({}, ...state, {
data: [
...state.data.slice(0, item.id),
Object.assign({}, ...state.data[item.id], {overlayVis: true}),
...state.data.slice(item.id + 1)]
});
}
});
return returnObj;
Каждая итерация отменяет предыдущую итерацию так только одно изменение производится каждый раз, когда действие выполняется. Я попытался использовать «state» и «returnObj» вместо «... state», но он не сработал. Я не писал здесь в течение долгого времени, но у меня нет идей.
Любая помощь будет принята с благодарностью!
Я думаю, что я только что имел Эврика момент ... все кажется намного яснее! Спасибо, кажется, работает отлично. – Oli
Но подождите ... это снова воссоздает все предметы с нуля? – Oli
Да, это так. Но если вы этого не сделаете, ссылки, которые сохраняют ваши компоненты React Components, останутся неизменными, а это означает, что Компонент не считает, что ничего не изменилось. Очень важно, чтобы вы меняли ссылки на каждую мутацию. –