我正在尝试使用JSON数据映射在第二个渲染中渲染数据。我必须查看两个对象才能找到匹配的product_ids
我在这里做什么错了?
{
this.props.productGroups.map((productGroup) => {
return (
<TabContainer key={productGroup.id}>
<h3>{productGroup.title}</h3>
{
productGroup.product_ids.map((productId) => {
this.props.products.map((product) => {
if (product.id == productId) {
return (
<div>
test
</div>
)
} else {
console.log('miss')
}
})
})
}
</TabContainer>
)
})
}
在旁注中,我知道这是回调地狱,只是不确定要采用哪种最佳重构方式。
答案 0 :(得分:1)
您的第一个.map()在this.props....
前缺少返回值
return this.props.products.map((product) => {
答案 1 :(得分:1)
@BenSteward的答案是正确的。请注意,有多种方法可以减少嵌套地图。
一种方法是,您无需遍历product_ids
并遍历其中的products
,而只需遍历products
并检查是否product
是指定product_ids
中的ID 退出:
(这是代码更干净的版本,其中parenthesis
和braces
更少)
{
this.props.productGroups.map(productGroup => (
<TabContainer key={productGroup.id}>
<h3>{productGroup.title}</h3>
{this.props.products.map(product => {
if (productGroup.product_ids.includes(product.id)) { /* Note this line */
return <div>test</div>
}
console.log('miss')
})}
</TabContainer>
))
}
我相信它的性能会更好,并且对您未来的自我也更容易理解。