如何在 React 组件中动态渲染 JSON 数据中的多级列表
发布时间 - 2026-01-30 00:00:00 点击率:次本文详解如何使用 object.entries() 正确解析嵌套 json 数据,并为每个键(如 h3、h4)生成独立的标题与无序列表,避免 object.values() 导致的键丢失和结构混乱问题。
在 React 中渲染结构化 JSON 数据时,关键在于保留键名语义并按层级准确映射 DOM 元素。你提供的数据中,value 对象包含多个键(h3、h4、h5),每个键对应一个字符串数组——这天然适配「标题 + 列表」的 UI 模式。但直接使用 Object.values(data) 会丢弃键信息(如 "h3"),导致无法动态生成
标签,也无法区分不同列表的语义与样式。
✅ 正确做法是使用 Object.entries():它返回一个二维数组,每一项形如 ["h3", [...]],既保留键名又提供对应值,便于解构与渲染:
import { Disclosure } from '@headlessui/react';
const DisclosureHelper = ({ data }) => {
// ✅ 使用 Object.entries 获取 [key, value] 对
const entries = Object.entries(data);
const lists = entries.map(([key, items], index) => (
{/* 动态渲染标题标签:h3 → , h4 → */}
{key.startsWith('h') && !isNaN(parseInt(key[1])) ? (
{key.toUpperCase()}
) : (
Unknown Section
)}
{/* 渲染对应无序列表 */}
{items.map((item, i) => (
- {item}

))}
));
return {lists};
};
export default DisclosureHelper;
? 关键要点说明:
-
不要嵌套
- :
原代码中 - {list[1].map(...)} 会导致无效 HTML(
- 内直接包裹多个
- )。正确方式是让 map() 直接返回
- 元素,并置于
- 内。
- 动态标签安全处理: 示例中通过 key.startsWith('h') && !isNaN(...) 判断是否为合法标题键,避免运行时错误;生产环境可进一步用 React.createElement(key) 实现完全动态标签(需确保 key 是合法 HTML 标签名)。
- Key 的最佳实践: 外层 div 使用 index 作为 key 仅在键顺序固定且无增删时可接受;若数据可能动态变化,建议用 key 字符串(如 key={key})或结合唯一 ID。
- 样式与可访问性: 为每个列表添加语义化类名(如 list-disc, space-y-1),并确保文字颜色、间距符合可读性标准。
? 进阶提示: 若需支持更复杂结构(如嵌套对象、混合类型),可封装通用渲染函数,配合 typeof 和 Array.isArray() 做类型分发;亦可结合 useMemo 缓存渲染结果提升性能。
通过 Object.entries() + 解构赋值,你不仅能清晰表达数据意图,还能写出高内聚、易维护、符合 React 最佳实践的组件代码。
# react
# html
# js
# json
# 字符串数组
# Array
# Object
# 封装
# 字符串
# map
# 对象
# typeof
# dom
# ul
# li
# ui
# 多个
# 进阶
# 键名
# 还能
# 你不
# 并为
# 亦可
# 如何使用
# 仅能
# 关键在于
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
微信小程序制作网站有哪些,微信小程序需要做网站吗?
JavaScript模板引擎Template.js使用详解
Laravel怎么调用外部API_Laravel Http Client客户端使用
Python制作简易注册登录系统
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
JavaScript如何实现继承_有哪些常用方法
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
网页设计与网站制作内容,怎样注册网站?
常州企业网站制作公司,全国继续教育网怎么登录?
如何在景安服务器上快速搭建个人网站?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何在阿里云服务器自主搭建网站?
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在腾讯云服务器快速搭建个人网站?
如何为不同团队 ID 动态生成多个非值班状态按钮
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Linux网络带宽限制_tc配置实践解析【教程】
Laravel如何实现模型的全局作用域?(Global Scope示例)
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Laravel怎么上传文件_Laravel图片上传及存储配置
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
如何用狗爹虚拟主机快速搭建网站?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何在企业微信快速生成手机电脑官网?
如何快速登录WAP自助建站平台?
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
如何实现建站之星域名转发设置?
清除minerd进程的简单方法
JS去除重复并统计数量的实现方法
Laravel定时任务怎么设置_Laravel Crontab调度器配置
bing浏览器学术搜索入口_bing学术文献检索地址
如何用AI帮你把自己的生活经历写成一个有趣的故事?
高防服务器租用如何选择配置与防御等级?
JavaScript如何实现音频处理_Web Audio API如何工作?
如何在宝塔面板中创建新站点?
教你用AI将一段旋律扩展成一首完整的曲子
如何在IIS服务器上快速部署高效网站?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
非常酷的网站设计制作软件,酷培ai教育官方网站?


