Node.js Redux-按状态数组中的键查找对象并更新其另一个键

Node.js Redux-按状态数组中的键查找对象并更新其另一个键,node.js,reactjs,redux,react-redux,redux-thunk,Node.js,Reactjs,Redux,React Redux,Redux Thunk,我正在开发一个CRUD应用程序,在后端使用NodeJS,在前端使用React+Redux。这是一个快速的模式,说明了其中的一切是如何工作的: 添加项目 用户输入文章的标题 然后将标题发送给dispatch,dispatch在NodeJS中获取POST路由,并通过正文发送标题 在NodeJS路线中,我正在集合中添加一个具有该标题的新项目 后端完成,服务器中有新帖子 我在步骤2中的分派函数中添加了.then()。在其中,我使用类型发送一个操作:“ADD_POST”和POST:POST(我从NodeJ

我正在开发一个CRUD应用程序,在后端使用NodeJS,在前端使用React+Redux。这是一个快速的模式,说明了其中的一切是如何工作的:

添加项目

  • 用户输入文章的标题
  • 然后将标题发送给dispatch,dispatch在NodeJS中获取
    POST
    路由,并通过正文发送标题
  • 在NodeJS路线中,我正在集合中添加一个具有该标题的新项目
  • 后端完成,服务器中有新帖子

  • 我在步骤2中的分派函数中添加了
    .then()
    。在其中,我使用
    类型发送一个操作:“ADD_POST”
    POST:POST
    (我从NodeJS
    res.json({POST:result from database})获得POST

  • 在我的reducer中,我设置了一个
    案例“ADD_POST”:return action.POST

  • 前端完成后,用户无需刷新即可看到相同的帖子

    我想用同样的逻辑来更新某个特定帖子的likes。这就是我到目前为止所做的:

  • 点击post上的按钮会触发一个调度,该调度获取NodeJS
    PUT
    route
  • nodejsroute使用ID查找post,并将post的旧值加1
  • 后端完成,post现在在服务器中有1个类似的

  • 我正在添加
    。然后
    再次添加到获取NodeJS路由的分派中,在该分派中,我使用更新的
    类型'ADD_LIKE'
    post ID
    分派操作

  • 在reducer中,我设置了一个
    案例'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
        }
    })
    
    如果有帮助的话,这是我一直在看的播放列表,如果你想你可以看看这个家伙是如何实现删除功能的,我想使用相同的逻辑添加Likes功能:

    [1]
    行创建一个新对象,该对象具有
    的所有相同属性,但它会覆盖现有属性
    likes
    ,并简单地添加
    1

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

    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]
    });