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

React JS如何正确渲染数组中的对象及其属性?

React 数组map渲染对象列表正确实现

原代码存在的问题

  • 变量命名冲突:map回调的参数名和外层数组champions重名,属于变量遮蔽问题,建议单个遍历项使用单数形式champion做区分,提升代码可读性
  • 错误使用DOM属性:原生<div>标签不存在name/sport/games这类自定义属性,直接传入不会渲染可见内容还会触发控制台警告,对象属性值需要作为子节点写入标签内部才能展示
  • 缺失必填key属性:React遍历渲染列表时,要求每个列表最外层元素必须传入唯一的key值,用于虚拟DOM对比优化,避免列表更新时出现渲染错乱
  • 语法闭合错误:原代码中map方法的括号、JSX标签闭合位置错误,会直接导致编译失败

可直接运行的正确代码

import React from 'react';
import './App.css';
// 未使用的logo导入可以直接删除,避免无意义的编译提示

const champions = [
  {
    id: 1, // 实际项目优先用数据自带的唯一id做key,无唯一id时可临时用数组索引
    champName: 'Ivan Ivanov',
    sport: 'weightlifting',
    games: 'Barcelona 1992',
  },
  {
    id: 2,
    champName: 'Ekaterina Dafovska',
    sport: 'biathlon',
    games: 'Nagano 1998',
  },
];

function App() {
  return (
    <div className="champion-list">
      {champions.map((champion) => (
        // 每个列表项必须绑定当前列表范围内唯一的key值
        <div className="champion-card" key={champion.id}>
          <h3>{champion.champName}</h3>
          <p>参赛项目:{champion.sport}</p>
          <p>所属赛事:{champion.games}</p>
        </div>
      ))}
    </div>
  );
}

export default App;

后续开发扩展提示

  • 开发卡片、列表类组件时,可以把单个冠军项的JSX抽成独立的可复用组件,比如ChampionCard,遍历的时候直接传入props渲染即可,减少重复代码
  • 布局、卡片样式可以通过给对应标签绑定className,在App.css中编写样式规则实现
  • 注意:尽量不要用遍历索引作为key值,尤其是列表后续会涉及增删、排序操作的场景,很容易引发表单项错位、渲染状态错误等问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:27:45