Redux – 通过键在状态数组中查找对象并更新其另一个键

我正在使用后端的NodeJS和前端的React + Redux的CRUD应用程序。 这是一个如何运作的快速模式:

添加一个项目

  1. 用户inputpost的标题
  2. 然后将标题发送到在NodeJS中获取POST路由并通过主体发送标题的调度
  3. 在NodeJS路由中,我添加了一个新的项目集合与该标题

BACKEND DONE,新的post在服务器中

  1. 我在步骤2中添加.then()调度function,其中我派遣一个type: 'ADD_POST'post: post (我从res.json({post: result from database})

  2. 在我的reducer中,我设置了一个CASE 'ADD_POST': return action.post

完成FRONTEND后,用户现在可以看到同一个post,而不需要刷新

我想使用相同的逻辑来更新特定post的喜好 。 这是我迄今为止所做的:

  1. 点击一个post上的button会触发一个获取NodeJS PUT路由的调度
  2. NodeJS路由查找使用ID的文章,并添加1到喜欢该post的旧值

BACKEND DONE,现在在服务器上有1个以上

  1. 我再次添加到获取NodeJS路由的调度中,在该调度中,我分配了一个type 'ADD_LIKE'的操作,并更新了更新的post ID

  2. 在reducer中,我设置了一个CASE 'ADD_LIKE':它使用下面代码片段中的代码遍历整个状态。

这是这个片段:

 state.map(item => { if(item.id === action.postid) { //i find the specific item, but now im stuck on how to update the likes property of it } }) 

如果有帮助,这是我一直在观看的播放列表,如果你想看看这个人如何实现删除function,我想用相同的逻辑添加喜欢function: 链接到播放列表

 state.map(item => { if (item.id !== action.postid) return item; // no need to change other items const likes = item.likes; return Object.assign({}, item, {likes: likes + 1}); // [1] }); 

Line [1]创build一个新的对象,它具有所有项目的相同属性,但是会覆盖现有的属性likes并简单地添加1

确保实际上为reducer中的已更改项目创build了一个新对象,因为状态中的所有内容都应该是不可变的。