尝试从我的状态中过滤出嵌套在我的减速器中的项目

时间:2018-09-05 14:08:27

标签: reactjs react-redux

我的状态看起来像这样:

{     
 "account":{  
    "id":7,    
    "categories":[  
       {  
          "id":7,          
          "products":[  
             {                  
                "productId":54                
             }
          ]
       },
       {  
          "id":9,          
          "products":[  
             {                  
                "productId":89                
             }
          ]
       }
    ]
 }
}

现在在我的减速器中,我可以返回当前状态,如:

return {...state}

我可以为以下帐户设置一个新值:

return { ...state, account: action.account }

但是如何过滤集合中的嵌套项目?

如果这样做,我的过滤器将返回类别,这是错误的,因为我想返回一个帐户:

return {...state, account: state.account.categories.filter((c) => c.id === 4)}

如果执行上述操作,我现在没有设置帐户值,而是将帐户设置为类别的集合。

有人可以向我解释我如何才能更深入一点。 通过过滤嵌套的类别集合将帐户值设置为新值。

1 个答案:

答案 0 :(得分:1)

我认为您面临的挑战是您正在屏蔽原始数据源,因此由于原始数据丢失而无法应用其他过滤器。要解决此问题,我建议您创建一个 新字段来存储所选类别。

return {
  ...state,
  account: {
    ...state.account, 
    selectedCategory: state.account.categories.find((c) => c.id === action.categoryId)
  }
}