redux: идентификаторы против объектов - PullRequest
0 голосов
/ 20 ноября 2018

Документация Redux дает пример хранилища, в котором хранятся сообщения и комментарии.Чтобы уменьшить сложность вложенных объектов, предлагается сохранить комментарии в виде массива идентификаторов.

Таким образом, код редуктора сообщений будет выглядеть так:

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
}

Хотя этот пример оченьпросто, в других случаях сохранение целых объектов значительно облегчит сложные селекторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...