使用嵌套映射es6更新状态

时间:2017-11-23 17:00:58

标签: arrays reactjs object redux

我的状态有一个对象数组,它们还包含一个对象数组。

var state = {
  prop1: null,
  categories: [
    {
      categoryId: 1,
      tags: [
        {
          tagId: 1,
          name: 'AA11',
          status: true,
        },
        {
          tagId: 2,
          name: 'AA22',
          status: false,
        }
      ]
    },
    {
      categoryId: 2,
      tags: [
        {
          tagId: 1,
          name: 'BB11',
          status: true,
        },
        {
          tagId: 2,
          name: 'BB22', 
          status: false, // let's say i want to toggle this
        }
      ]
    },
  ]
};

我有一个动作可以切换标签的状态。此操作将接收参数categoryIdtagId

到目前为止,我已经提出了这个但是它不起作用

return {
  ...state,
  categories: state.categories.map((category) => {
    category.tags.map(tag => (
      (tag.tagId === action.tagId && category.categoryId === action.categoryId) ? {
        ...tag,
        status: !tag.status,
      } : tag));
    return category;
  }),
};

1 个答案:

答案 0 :(得分:0)

我终于修复了地图代码。

return {
  ...state,
  categories: state.categories.map(category => ((category.id === action.categoryId) ?
    {
      ...category,
      tags: category.tags.map(tag => (tag.id === action.tagId ? {
        ...tag, status: !tag.status,
      } : tag)),
    } : category)),
};