You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何用.map()渲染嵌套数组并获取recipeName?

如何在React中使用.map()获取recipeName?

问题分析

你的代码已经在遍历recipes数组,但只渲染了recipeSize,没有输出recipeName;另外多个<a>标签连续使用会导致内容无分隔,视觉上容易误以为没渲染。同时要确保模拟数据正确传递给了组件。

修正方案

1. 确保数据正确传递

在父组件中把模拟的recipe数组作为diets属性传给DietList:

function App() {
  const recipe = [
    {
      category: 'Keto',
      name: 'Chicken Bistek',
      calories: '500',
      description: '',
      recipes: [
        { recipeName: 'Chicken', recipeSize: '3 lbs' },
        { recipeName: 'Garlic', recipeSize: '4 cloves' },
        { recipeName: 'Onion', recipeSize: '1 whole' },
        { recipeName: 'Soy Sauce', recipeSize: '1/4 cup' },
        { recipeName: 'Coconut Oil', recipeSize: '1 tbsp' },
        { recipeName: 'Water', recipeSize: '1 cup' },
      ],
    },
  ];

  return <DietList diets={recipe} />;
}

2. 修正DietList组件

改用语义化标签展示内容,同时渲染recipeName和recipeSize:

const DietList = (props) => {
  return (
    <>
      {props.diets.map((diet) => (
        <div key={diet.name} style={{ margin: '1rem 0', padding: '1rem', border: '1px solid #eee' }}>
          <h3>{diet.name}</h3>
          <p>分类:{diet.category}</p>
          <h4>食材清单:</h4>
          <ul>
            {/* 使用可选链操作符防止recipes不存在时报错 */}
            {diet.recipes?.map((recipeItem) => (
              <li key={recipeItem.recipeName}>
                {recipeItem.recipeName} - {recipeItem.recipeSize}
              </li>
            ))}
          </ul>
        </div>
      ))}
    </>
  );
};

关键改进点

  • 替换<a>标签为语义化的标题、段落和列表,避免链接标签的语义混淆,同时让内容结构更清晰
  • 在recipes的遍历中同时渲染recipeName和recipeSize,完整展示食材信息
  • 添加diet.recipes?.map的可选链操作符,防止部分食谱没有recipes数组时出现报错
  • 增加简单的内联样式,分隔每个食谱卡片,提升可读性

内容的提问来源于stack exchange,提问作者Big. D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:32:45