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

React如何正确渲染items菜单数据到div(解决页面空白问题)

问题原因

直接在JSX中写<div>{items}</div>导致白屏的核心原因:React 不支持直接渲染普通JavaScript对象。
JSX插值语法(大括号包裹的内容)仅接受以下合法可渲染值:

  • 字符串、数字
  • 合法的React/JSX元素
  • 所有元素均为合法可渲染值的数组
  • null、undefined、布尔值(这类值渲染时会被自动忽略,不显示内容)

你定义的items是多层嵌套的普通对象,直接传入会触发React渲染运行时错误,中断整个组件的渲染流程,最终表现为整页空白。
另外你的代码存在一个基础笔误:组件导出语句缺失前缀,正确写法应为export default function Home(params) {,原代码写的port default会直接触发语法报错。

正确实现代码

你的items是按菜品分类存储的结构化数据:分类名作为对象键,对应值为该分类下的菜品数组,每个菜品包含名称、价格两个属性。你只需要遍历这个数据结构,逐一生成对应的DOM元素即可,完整可运行代码如下:

export default function Home() {
  const items = {
    Rice: [{ name: "Diri Djon Djon (Black rice)", Price: "$14.00" }],
    // 后续新增菜品、分类直接在此处扩展即可,例如:
    // Appetizer: [{name: "Pate Kode", Price: "$3.00"}, {name: "Accra", Price: "$6.00"}]
  };

  return (
    <>
      <h1>Welcome to the best Hatian Restaurant in the City!!</h1>
      <p>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente atque
        consequatur magnam ex repellat fuga officia corrupti quos distinctio,
        similique ad praesentium assumenda explicabo dolorum ea aperiam ab
        blanditiis voluptatum!
      </p>
      <hr />
      <div className="locate"></div>
      <div className="address-text">
        <h4></h4>
        <br />
        <div className="phone number">
          <h4></h4>
        </div>
        <div className="container2">
          <img className="image1" src="./images/HaitinFood.png" alt="food" />
        </div>
      </div>
      <div>
        <h1>Menu</h1>
        <h3>ENTRÉES </h3>
        <div className="container2">
          <p>Diri Djon Djon (Black rice) Medium $12 Large $14 </p>
        </div>
        {/* 渲染结构化菜单数据 */}
        <div className="menu-container">
          {Object.entries(items).map(([categoryName, dishList]) => (
            <div key={categoryName} className="menu-category">
              <h4>{categoryName}</h4>
              {dishList.map((dish, idx) => (
                <p key={idx} className="dish-line">
                  {dish.name} {dish.Price}
                </p>
              ))}
            </div>
          ))}
        </div>
      </div>
    </>
  );
}
关键逻辑说明
  • 普通对象无法直接遍历,使用Object.entries(items)将其转换为[分类名, 菜品数组]格式的数组后,即可通过map方法逐行渲染内容
  • 遍历生成列表元素时,需要给每个最外层元素添加唯一的key属性,避免React抛出列表渲染警告
  • 后续维护菜单只需要修改items对象中的数据即可,不需要调整JSX结构,数据和视图分离的写法也更方便后续扩展
  • 额外修正了原代码中的几个小问题:图片路径中的Windows风格反斜杠\替换为Web通用的正斜杠/,避免部署时路径解析失败;修正了Menue、Resurant的拼写错误。

内容的提问来源于stack exchange,提问作者Junior Joseph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:33:39