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

时间:2017-06-27 21:08:17

标签: node.js reactjs redux react-redux redux-thunk

我正在使用后端的NodeJS和前端的React + Redux处理CRUD应用。这是一切如何在其中运作的快速模式:

添加项

  1. 用户输入帖子的标题
  2. 然后将标题发送到调度,该调度在NodeJS中获取POST路由并通过正文发送标题
  3. 在NodeJS路线中,我正在使用该标题添加一个新项目
  4. BACKEND DONE,新帖子在服务器中

    1. 我在第2步中的调度函数中添加了.then(),其中我使用type: 'ADD_POST'post: post发送了一个操作(我从NodeJS发布了帖子res.json({post: result from database})

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

    3. FRONTEND DONE,相同的帖子现在可供用户看到而无需刷新

      我想使用相同的逻辑来更新特定帖子的。这是我到目前为止所做的:

      1. 点击帖子上的按钮会触发调度,该调度会获取NodeJS PUT路径
      2. NodeJS路线使用ID查找帖子,并将旧帖子的值添加1(如帖子
      3. BACKEND DONE,现在发布了1个更像服务器

        1. 我再次将.then添加到调度中,该调度获取NodeJS路由,我在其中发送了我更新的type 'ADD_LIKE'post ID的操作

        2. 在reducer中的
        3. 我设置了CASE 'ADD_LIKE':,它使用以下代码段中的代码遍历状态。

        4. 以下是该片段:

          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功能:Link to playlist < / p>

1 个答案:

答案 0 :(得分:4)

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

[1]创建一个具有item所有相同属性的新对象,但它会覆盖现有属性likes,只需添加1

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