redux:ID与对象

时间:2018-11-20 12:29:15

标签: javascript redux

Redux documentation提供了一个存储帖子和评论的存储示例。为了减少嵌套对象的复杂性,建议将注释保留为ID数组。

因此,posts reducer的代码将如下所示:

function postsById(state = {}, action) {
  switch (action.type) {
    case 'ADD_COMMENT':
      var { commentId, postId, commentText } = action.payload;
      var post = state[postId];
      return {
        ...state,
        [postId]: {
          ...post,
          comments: post.comments.concat(commentId)
        }
      }
    default: 
      return state
  }
}

但是为什么不将整个对象保留在那里?

...
return {
  ...state,
  [postId]: {
    ...post,
    comments: post.comments.concat(
      {commentId, commentText}  // <=
    )
  }
}
...

如果这样做,则无需使用复杂的选择器和计算来获取所需的数据:

// keeping IDs
function getPostComments(state, postId) {
  return state.postsById[postId].comments.map(
    commentId => state.commentsById[commentId]
  )
}

// keeping objects
function getPostComments(state, postId) {
  return state.postsById[postId].comments
}

尽管此示例非常简单,但在其他情况下,保留整个对象将使复杂的选择器更加容易。

0 个答案:

没有答案