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

React中使用for in循环渲染多HTML标签的正确方式(解决仅显首个内容问题)

React中遍历对象属性渲染所有姓名的正确方法

你的代码只显示第一个名字的原因很直接:fullName函数的for-in循环里,第一次迭代就执行了return语句,直接终止了函数,循环后续的迭代根本没机会运行,自然只返回了第一个姓名对应的<span>。

下面是几种正确的实现方式:

方法1:用Object.values遍历属性值

直接提取对象的所有属性值,通过map生成对应的元素数组,注意给每个元素添加唯一key(这里用索引作为key,若属性值可能重复,建议用属性名):

import "./styles.css";
import { useState } from "react";

export default function App() {
  const [annie, renameAnnie] = useState({
    firstname: "Annie",
    middlename: "Rose",
    lastname: "Markham"
  });

  return (
    <>
      {Object.values(annie).map((namePart, index) => (
        <span key={index}>{namePart} </span>
      ))}
    </>
  );
}

如果要保留fullName函数,也可以这么写:

const fullName = () => {
  return Object.values(annie).map((namePart, index) => (
    <span key={index}>{namePart} </span>
  ));
};

方法2:明确指定属性顺序(更可控)

如果需要严格按照firstname→middlename→lastname的顺序渲染(避免对象属性隐式排序的不确定性),可以先定义属性名数组,再遍历:

import "./styles.css";
import { useState } from "react";

export default function App() {
  const [annie, renameAnnie] = useState({
    firstname: "Annie",
    middlename: "Rose",
    lastname: "Markham"
  });
  // 明确指定属性顺序
  const nameFields = ["firstname", "middlename", "lastname"];

  return (
    <>
      {nameFields.map(field => (
        <span key={field}>{annie[field]} </span>
      ))}
    </>
  );
}

这种方式的优势是渲染顺序完全由你控制,不会因为对象属性的默认排序问题导致显示顺序错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:20:13