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

如何在.map()方法中为React函数式组件传递key属性?

如何在.map()方法中为React函数式组件传递key属性?

嘿,我太懂这个坑了!很多刚接触React的朋友都会在key属性上栽跟头,你遇到的情况其实是React的一个核心规则:key必须直接传递给.map()循环里渲染的那个组件实例,而不是在子组件内部设置。

为什么你之前在FunctionalComponent里写的key没用呢?因为React的diff算法只会识别map循环返回的顶层元素上的key,子组件内部的div上的key对列表的唯一性标识完全不起作用——React根本不会去看那里的key。

给你整理一套正确的做法:

第一步:简化子组件,去掉内部的key逻辑

子组件只需要专注于接收props并渲染内容,key的事情交给父组件处理:

export default function FunctionalComponent({ title }) {
    // 这里不需要处理key,我们把key的逻辑移到父组件的map里
    return <div>{title}</div>;
}

第二步:在父组件的.map()循环中给子组件绑定key

这才是key应该待的地方!在循环渲染FunctionalComponent的时候,直接把key作为props传递给它:

export default function ParentComponent({ bigTitle, titles }) {
    const parentDashedTitle = bigTitle.split(' ').join('-');

    return (
        <>
            {titles.map(title => {
                const dashedTitle = title.split(' ').join('-');
                // 关键:在这里给每个FunctionalComponent实例加上唯一的key
                return (
                    <FunctionalComponent
                        key={`${dashedTitle}-in-${parentDashedTitle}`}
                        title={title}
                    />
                );
            })}
        </>
    );
}

补充说明:关于key的唯一性

只要key在当前兄弟组件中是唯一的就足够了,不需要全局唯一。你用${dashedTitle}-in-${parentDashedTitle}这种组合来生成key是很靠谱的,能有效区分不同父组件下的子元素,避免重复。

这样修改之后,React的控制台应该就不会再弹出那个“缺少key prop”的警告啦!

备注:内容来源于stack exchange,提问作者artemkhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:19:33