
本文介绍如何将从 api 获取的数组型数据(如文章列表)通过 map() 方法逐个传递给子组件,并在子组件中正确解构和渲染每条数据的字段(如 title、description),避免 props 传递错误与渲染异常。
在你的 ApiRequest 组件中,你已成功获取并存储了来自 https://dummyjson.com/posts 的数据,data.posts 是一个包含多个文章对象的数组。但当前你将整个数组作为 data prop 一次性传给了
✅ 正确做法是:在父组件中遍历数据数组,为每一项数据单独渲染一个
// ApiRequest.jsx return ( <> {dataApi.map((post, index) => ( ))} > );
? 注意:优先使用唯一标识符(如 post.id)作为 key,比索引 index 更安全,可避免列表重排时的渲染异常。
接着,更新 Carts 组件,使其能从 props.data 中安全提取所需字段:
// Carts.jsx export default function Carts({ data }) { // 添加空值防护,防止 API 数据未加载完成时渲染报错 if (!data) return NULL; const { title = '无标题', body = '暂无内容', id } = data; return ( {/* 可选:添加占位图或动态图片逻辑 */} @@##@@ {title}
{body}
); }
? 关键要点总结:
- ❌ 不要将整个数组直接传给单个子组件(如
); - ✅ 必须在父组件中用 .map() 展开数组,为每个元素创建独立组件实例;
- ✅ 子组件应设计为接收单个数据对象,并做字段解构与默认值兜底(如 title = ‘无标题’);
- ✅ 始终为 map 提供语义化 key(推荐使用后端返回的 id);
- ⚠️ 在子组件内增加 if (!data) return null; 或使用可选链(data?.title)提升健壮性。
这样即可实现“一条 API 数据 → 一个卡片组件”的清晰、可维护、可扩展的渲染模式。