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
相关产品推荐
相关产品推荐

