Redux – 通过键在状态数组中查找对象并更新其另一个键
我正在使用后端的NodeJS和前端的React + Redux的CRUD应用程序。 这是一个如何运作的快速模式:
添加一个项目
- 用户inputpost的标题
- 然后将标题发送到在NodeJS中获取
POST
路由并通过主体发送标题的调度 - 在NodeJS路由中,我添加了一个新的项目集合与该标题
BACKEND DONE,新的post在服务器中
-
我在步骤2中添加
.then()
调度function,其中我派遣一个type: 'ADD_POST'
并post: post
(我从res.json({post: result from database})
) -
在我的reducer中,我设置了一个
CASE 'ADD_POST': return action.post
完成FRONTEND后,用户现在可以看到同一个post,而不需要刷新
我想使用相同的逻辑来更新特定post的喜好 。 这是我迄今为止所做的:
- 点击一个post上的button会触发一个获取NodeJS
PUT
路由的调度 - NodeJS路由查找使用ID的文章,并添加1到喜欢该post的旧值
BACKEND DONE,现在在服务器上有1个以上
-
我再次添加到获取NodeJS路由的调度中,在该调度中,我分配了一个
type 'ADD_LIKE'
的操作,并更新了更新的post ID
-
在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了一个新对象,因为状态中的所有内容都应该是不可变的。