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

React项目中如何为map渲染的组件添加Key prop?

给map渲染的组件添加Key的正确方式

你现在直接调用组件函数的写法没法传递key属性——key是React识别列表元素的特殊属性,必须在创建React元素时指定。下面是两种可行的修改方式:

方法一:使用JSX语法(推荐)

把函数调用改成JSX形式,就能正常添加key了:

import React, { Suspense, useEffect, useMemo, useRef, useState } from "react";
import "./PartOne.css";

const PartOne = () => {
const [rooms, setRooms] = useState([
    Room1,
    Room2,
    Room3,
    Room4,
    Room5,
    Room6,
    Room7,
    Room8
]);

useEffect(() => {
    console.log("rooms state:", rooms);
}, [rooms]);

return (
    <div className="wrapper">
        {rooms.map((RoomComponent, roomIndex) => (
            <RoomComponent 
                key={roomIndex} 
                position={positions[roomIndex]} 
            />
        ))}
    </div>
);
};
export default PartOne;

这里把变量名改成RoomComponent(首字母大写符合React组件命名规范),用<RoomComponent />的JSX语法,就能直接在标签上添加key属性。

方法二:使用React.createElement

如果要保留函数调用的形式,可以用React.createElement创建元素,第二个参数就是key:

import React, { Suspense, useEffect, useMemo, useRef, useState } from "react";
import "./PartOne.css";

const PartOne = () => {
const [rooms, setRooms] = useState([
    Room1,
    Room2,
    Room3,
    Room4,
    Room5,
    Room6,
    Room7,
    Room8
]);

useEffect(() => {
    console.log("rooms state:", rooms);
}, [rooms]);

return (
    <div className="wrapper">
        {rooms.map((room, roomIndex) =>
            React.createElement(room, { 
                key: roomIndex, 
                position: positions[roomIndex] 
            })
        )}
    </div>
);
};
export default PartOne;

额外提醒:如果后续rooms数组会有增删、排序操作,建议用组件的唯一标识(比如组件名称)当key,不要用索引,避免React渲染异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:55:24