我正在学习Redux,在尝试弄清楚如何向字典添加密钥对时遇到了麻烦:

//Page Dictionary
{
  randomId1: { aPageObj },
  randomId2: { aPageObj }, etc
}


我试过了但是没用

//action
export function addPage( pageId, pageObj ) {
  return { type: types.ADD_PAGE, pageId, pageObj };
}

//reducer
case types.ADD_PAGE: {
  return Object.assign({}, state, {
    pages: {
      ...state.pages, action.pageId: action.pageObj
    }
  });
}


我究竟做错了什么?仍在尝试找出如何不改变状态。

最佳答案

您需要使用对象文字的computed property name(与[]一起使用):

pages: {
  ...state.pages, [action.pageId]: action.pageObj
}


此外,如果可以使用对象spreas语法,则可以省略Object.assign,例如:

return {
  ...state,
  pages: {
    ...state.pages, [action.pageId]: action.pageObj
  }
}

09-17 22:35