React:映射到映射数组内的数组

React : Mapping over an array inside of a mapped array

我有一系列产品,有些产品可能有一系列产品颜色,但不能保证。我正在尝试映射每种产品的每种颜色(如果可用)以赋予它自己的 div。除了 product.product_colors.map() 部分,我写的这段代码有效。任何贡献或资源链接都会有所帮助。谢谢

从 api 中获取的数据如下所示:

{
    "status": 200,
    "count": 2,
    "data": [
        {
        "product_id": 1,
        "product_name": "PRODUCT NUMBER 1",
        "product_price": "14.95",
            "product_colors": [
            {
            "color_id": 1,
            "color_name": "Velvet",
            "color_description": "A reddish-purple color"
            },
            {
                "color_id": 2,
                "color_name": "Navy",
                "color_description": "A darkish blue color somewhat similar to the deep ocean color."
            }
            ]
        },
        {
        "product_id": 2,
        "product_name": "PRODUCT NUMBER 2",
        "product_price": "8.99"
        }
    ]
}

我当前的代码如下所示:

    return(
        <div>
            {data.map((product, index) => (
                <div key={index}>
                    <h2>{product.product_id} ---- {product.product_name}</h2>
                    <h2>{product.product_price}</h2>

                    {product.product_colors
                    ?<div><p>No colors available</p></div>
                    : product.product_colors.map((color) => (
                        <div>
                            <p>{color.color_name}</p>
                            <p>{color.color_description}</p>
                        </div>
                    ))
                    }

                    <br />
                </div>
            ))}
        </div>
    );

您已切换条件。您希望在 product.product_colors 为真时映射数组,这是第一个条件。

换句话说,你想要

product.product_colors ? product.product_colors.map((color) => (
                        <div>
                            <p>{color.color_name}</p>
                            <p>{color.color_description}</p>
                        </div> : <div><p>No colors available</p></div>

错误是由于第二项没有 product_colors 属性。您需要使用 optional chanining operator (?.) 来消除您遇到的错误。

product.product_colors?.map((color) => (
  <div>
    <p>{color.color_name}</p>
    <p>{color.color_description}</p>
  </div>
))

您需要确保 product.product_colors 存在。

最短的方法是使用 optional chaining ?. 语法:

product.product_colors?.map((color, index) =>

小例子:

const data = {"status": 200, "count": 2, "data": [{"product_id": 1, "product_name": "PRODUCT NUMBER 1", "product_price": "14.95", "product_colors": [{"color_id": 1, "color_name": "Velvet", "color_description": "A reddish-purple color"}, {"color_id": 2, "color_name": "Navy", "color_description": "A darkish blue color somewhat similar to the deep ocean color."} ] }, {"product_id": 2, "product_name": "PRODUCT NUMBER 2", "product_price": "8.99"} ] };

const res = data.data.map((product, index) => {
    product.product_colors?.map((color, index) => {
        console.log(color);
    });
});