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

React中使用Card组件渲染列表出现[object Object]问题如何解决

问题根因

你遇到的[object Object]渲染问题来自几个核心错误:

  • JSX 语法编译后本质是返回描述UI的普通JavaScript对象,并非HTML字符串。直接把JSX对象拼接到innerHTML属性时,JS会自动调用对象的toString()方法,最终输出的就是[object Object]字符串。
  • 手动通过document.getElementById操作DOM修改内容的写法,完全脱离React的渲染生命周期,Card组件不会被React正常挂载、解析和渲染。
  • 字段名不匹配:对比接口返回的JSON结构,你代码里写的item.imagePath、item.tag实际对应接口字段是itemImagePath、tags(且tags是数组类型,直接渲染会报错)。
  • 额外问题:fetch请求直接写在组件函数体中,每次组件重渲染都会重复触发请求,导致性能浪费和重复渲染。
正确实现方案

React是声明式、数据驱动视图的框架,你只需要维护列表对应的状态,在JSX中遍历状态渲染Card组件即可,完全不需要手动操作DOM修改innerHTML。
完整可运行代码如下:

import { useState, useEffect } from 'react';
// 按你项目实际路径引入Card组件,以下为react-bootstrap的引入示例
import Card from 'react-bootstrap/Card';

const ItemList = () => {
  // 定义状态存储接口返回的列表数据,初始值为空数组
  const [itemList, setItemList] = useState([]);

  // 接口请求属于副作用,放在useEffect中,仅组件首次挂载时执行
  useEffect(() => {
    const getList = async () => {
      const res = await fetch('http://localhost:3001/api/itemList/', {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "Accept": "application/json",
        },
        body: JSON.stringify({
          userId: localStorage.getItem("userId"),
        })
      });
      const listData = await res.json();
      // 更新状态,自动触发组件重渲染
      setItemList(listData);
    };
    getList();
  }, []);

  return (
    <div id="cards" className="d-flex flex-wrap gap-3">
      {/* 遍历列表状态,直接渲染Card组件 */}
      {itemList.map(item => (
        <Card key={item.id} style={{ width: '18rem' }}>
          <Card.Img variant="top" src={item.itemImagePath} alt={item.itemName} />
          <Card.Body>
            <Card.Title>{item.itemName}</Card.Title>
            <Card.Text>
              {/* tags是数组,按需拼接为字符串渲染 */}
              {item.tags?.join(' / ')}
            </Card.Text>
          </Card.Body>
        </Card>
      ))}
    </div>
  )
}

export default ItemList;
关键规则
  • 在React组件中,优先通过状态驱动视图更新,禁止直接操作原生DOM修改页面内容。
  • JSX只能在React的渲染上下文中使用,不能作为普通字符串赋值给原生DOM的innerHTML等属性。
  • 遍历渲染列表项时,必须给每一项设置唯一的key属性(优先用接口返回的唯一id),保证React渲染diff逻辑正常。
  • 渲染前先核对接口返回的字段名、字段类型,避免因字段不匹配导致渲染异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:30:58