Я пытаюсь обновить один объект в массиве объектов с помощью избыточной диспетчеризации, я попробовал ответить на похожие вопросы, но, похоже, не могу заставить его работать. То, что я хочу сделать, - это когда действие приходит, оно должно искать элемент в массиве с той же датой, что и action.options.date
, затем следует заменить этот элемент в массиве новым элементом actions.options.data[0]
, который является весь объект item.
const initialState = {
isFetching: false,
monthArray: [],
searchOptions: {
currentMonth: moment().format('YYYY-MM'),
leeway: 1
},
availabilityOptions: {
Early: -1,
Late: -1,
Day: -1,
Twilight: -1,
Night: -1
}
};
case UPDATE_DAY_IN_MONTH_ARRAY:
return Object.assign({}, state, {
monthArray: state.monthArray.map(item => {
if (formatDate(item.date) === formatDate(action.options.date)) {
return action.options.data[0];
}
return item;
})
});
Код действия: (Причина для данных: data [0], потому что возвращается массив объектов из mysql)
export const updateDayInMonthArray = (date, data) => {
return {
type: UPDATE_DAY_IN_MONTH_ARRAY,
options: {
date,
data: data[0]
}
}
}
Диспетчерская акция
const updateDayInMonthArrayHandler = (date, data) => {
dispatch(updateDayInMonthArray(date, data));
}