首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新redux数组中的多个项

更新redux数组中的多个项
EN

Stack Overflow用户
提问于 2018-08-21 23:32:31
回答 2查看 1.8K关注 0票数 2

我正在尝试更新处于redux状态的对象数组,

汽车redux状态

代码语言:javascript
复制
cars:  [
  {
    _id:"5b61b782719613486cdda7ec",
    car: "BMW",
    year: '2015'
   },
   {
      _id:"5b61b782719613486cdda7e1",
      car: "Toyota",
      year: '2015'
    },
    {
      _id:"5b61b782719613486cdda7e2",
      car: "Honda",
      year: '2015'
    },
    {
      _id:"5b61b782719613486cdda7e3",
      car: "Audi",
      year: '2015'
    }
 ]

action.payload数组

代码语言:javascript
复制
 action.payload :      
   [
    {
      _id:"5b61b782719613486cdda7ec",
      car: "BMW",
      year: '2019'
    },
    {
      _id:"5b61b782719613486cdda7e3",
      car: "Audi",
      year: '2019'
    }
  ]


case UPDATE_CARS:
  const updatedCars = state.cars.map((car) => {
  action.payload.forEach((newCars, index) => {
    if (car._id !== newCars._id) {
      //This is not the item we care about, keep it as is
      return car;
    } else {
      //Otherwise, this is the one we want to return an updated value
      return { ...car, ...newCars };
    }
  });
});

return {
  ...state,
  cars: updatedCars,
  loading: false
};

正如您所看到的,我正在尝试更新redux数组中的多个项,仅当项存在于redux状态时。

我做错了什么?有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-21 23:52:04

另一种选择:

代码语言:javascript
复制
const updatedCars = state.cars.map( car => {
  const found = action.payload.find( el => el._id === car._id );
  return found ? found : car;
});

forEach不是return anything,它只是对当前元素执行给定的函数。因此,对于这样的情况,map是您的朋友。

甚至还有一个更短更好的版本,@Luke M Willis在评论中提供了:

代码语言:javascript
复制
const updatedCars =
    state.cars.map(car => action.payload.find(el => el._id === car._id) || car);
票数 6
EN

Stack Overflow用户

发布于 2018-08-21 23:44:58

我将过滤掉action.payload中存在的state中的汽车。然后,我将合并action.payload,并像下面这样过滤state

代码语言:javascript
复制
case UPDATE_CARS:
  const updatedCarIds = action.payload.map(o => o.id);
  const notUpdatedCars = state.cars.filters(car => !updatedCarIds.includes(car.id))
  return [...notUpdatedCars, ...action.payload]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51952131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档