REDUCER ***如何更新阵列中的特定对象?

时间:2018-02-14 01:40:22

标签: reactjs ecmascript-6

我有一个包含对象的数组,并且已编辑其中一个对象,并希望将其替换为reducer中新更新的对象。 它没有更新,任何想法? 我的inititalState看起来像这样,我根据id更新了对象...我的有效负载有新更新的对象。



const initialState = newTimesheetDetail:[dayNo:0, details:[{id:2, name:'Bob', age:55}]]






        case EDIT_DETAILS + '_FULFILLED':
            const detailToEdit = state.newTimesheetDetail.filter(item => {
                let date1 = new Date(action.payload[0].workDate).withoutTime().toString();
                let date2 = new Date(item.date).withoutTime().toString();
                if (date1 === date2) {
                    item.details.map(e => {
                        return e.id === action.payload[0].id ? {...e, ...action.payload[0]} : e
                    })
                }
                return item
            })
            console.log('detailToEdit', detailToEdit)
            return Object.assign({}, state, { newTimesheetDetail: detailToEdit })




1 个答案:

答案 0 :(得分:0)

map函数不会更改原始数组,而是返回一个新数组。在这里,您需要返回一个包含更新详细信息的新item对象。

if (date1 === date2) {
  const newDetails = item.details.map(e => {
    return e.id === action.payload[0].id ? {...e, ...action.payload[0]} : e
  })
  return { ...item, details: newDetails }
}