
本文介绍如何将从 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 (
);
}? 关键要点总结:
- ❌ 不要将整个数组直接传给单个子组件(如
); - ✅ 必须在父组件中用 .map() 展开数组,为每个元素创建独立组件实例;
- ✅ 子组件应设计为接收单个数据对象,并做字段解构与默认值兜底(如 title = '无标题');
- ✅ 始终为 map 提供语义化 key(推荐使用后端返回的 id);
- ⚠️ 在子组件内增加 if (!data) return null; 或使用可选链(data?.title)提升健壮性。
这样即可实现“一条 API 数据 → 一个卡片组件”的清晰、可维护、可扩展的渲染模式。










