Construí una aplicación en React with Redux y en mi estado tengo una lista de objetos y quiero actualizar un objeto de esa lista por identificación única.
Mi objeto se parece a:
{ id: '', title: '', description: '', label: '', }
Mi estado:
const initialState = { compare: dayjs().month(), savedEvents: [], }
Cuando presiono un nuevo evento en esa lista, uso:
case 'events/setNewEvent': return { ...state, savedEvents: [...state.savedEvents, action.payload] };
Mi problema es que no sé escribir el código correcto para actualizar solo un objeto por identificación enviada desde mi formulario.
Puede usar una combinación de map
de método de matriz y spread operator
function updateOne(array, obj) { return array.map((item) => { if (obj.id === item.id) { // update whatever you want return {...item, title: obj.title }; } else { return item; } }) }
reductor:
case 'events/setNewEvent': return { ...state, savedEvents: updateOne(state.savedEvents, action.payload) };