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

为何我的JSON数组使用map方法时返回undefined?

问题:React映射JSON数组返回undefined的排查与解决

尝试映射JSON文件中的数组时,console.log结果显示为undefined,怀疑问题出在JSON文件,但无法定位错误。

JSON文件内容

{"homepage": {"servicios": {"subheader": "Servicios","title": "Áreas de Práctica","cards": [{"id": "1","title": "Empresarial","body": "lorem ipsum"},{"id": "2","title": "Protección de datos personales","body": "lorem ipsum"},{"id": "3","title": "Penal","body": "lorem ipsum"},{"id": "4","title": "Laboral","body": "lorem ipsum"},{"id": "5","title": "Migratorio","body": "lorem ipsum"}]}}}

React代码

import { Container, Col, Row } from "react-bootstrap";
import texts from "../../text/global.json";

function CardDeck() {
  const cards = [texts.homepage.servicios.cards];
  return (
    <>
          <Row>
            {cards.map((card) => {
              return <div>{card.title}</div>;
            })}
          </Row>
    </>
  );
}

export default CardDeck;

问题分析

JSON文件结构完全正确,错误出在React代码的数组赋值环节:

  • texts.homepage.servicios.cards本身就是一个数组,你用[]包裹后,cards变成了嵌套数组(即[ [ {...}, {...}, ... ] ])
  • 调用map时,遍历的是外层数组的唯一元素(原cards数组),此时card指向整个数组,自然不存在title属性,返回undefined

解决方案

直接将texts.homepage.servicios.cards赋值给cards,无需额外包裹数组:

function CardDeck() {
  // 去掉外层[],直接取原数组
  const cards = texts.homepage.servicios.cards;
  // 可选:添加可选链操作符,防止层级不存在导致报错
  // const cards = texts?.homepage?.servicios?.cards || [];
  return (
    <>
      <Row>
        {cards.map((card) => {
          return <div key={card.id}>{card.title}</div>;
        })}
      </Row>
    </>
  );
}

另外,建议给map返回的元素添加key属性(用card.id),符合React的列表渲染规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:52:54