javascript - reactjs context reducer增量数据

标签 javascript reactjs

如何增加对象内的数组值。

我尝试了下面的代码,但它删除了服装数组并将其替换为 shirts: Nan value

export const initialState = {
    booking: {
       expPrice: 0,
       garments: [
        {
            shirts: 0
        },
        {
            pants: 0
        },
        {
            etc: 0
        }
    ]
},
bookings: []
};

export const bookingsReducer = (state, action) => {
   switch (action.type) {
    case 'INCREMENT_SHIRT': {
        return {
            ...state,
            booking: {
                ...state.garments,
                shirts: state.shirts + 1 // how to increment 
            }
        };
    }
    default:
        return state
   }
}

最佳答案

您正在尝试将 garments 数组的属性扩展到您的新预订对象中,但是,由于 state 没有 garments 属性,您将传播 undefined(这是一个空操作)。此外,如果它确实保存了您的数组,您将把数组的索引作为新对象的键进行传播。您还向预订对象添加了 shirt 属性,但您不想这样做,因为您希望将此属性保留在 garments 数组的对象中。

相反,将 state.booking 属性传播到您的预订对象中,然后用一个新数组覆盖服装属性,使其成为您当前服装数组的映射版本。当您映射时,如果您找到一个具有 shirts 属性的对象,您可以通过将当前值加一来增加它的值,否则,您可以返回当前对象:

return {
  ...state,
  booking: {
    ...state.booking,
    garments: state.booking.garments.map(
      obj => obj.hasOwnProperty('shirts') ? {shirts: obj.shirts+1} : obj
    ) 
  }
};

关于javascript - reactjs context reducer增量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67445097/

相关文章:

javascript - jQuery 或 JavaScript : get MIME type of client file

javascript - 在 CMS 中的何处放置简单的 "Accept Conditions and Book"脚本

javascript - 将 Google 日历数据与基于 D3.js 的日历集成

javascript - ES6中如何导入匿名函数

reactjs - 在 redux-observable 中 - 如何调度操作 "mid-stream"而不返回该操作的值?

javascript - 如何在 React 中使用 map 中的 map ?

javascript - 如何在 React Native 中用两条语句编写 if 条件

javascript - .substr(0,1) 或 .charAt(0) 之间有什么区别?

javascript - 具有反应虚拟化和新 CellMeasurer 的动态行高

javascript - 如何使用 es6 (reactjs) 通过索引在项目列表中查找对象