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

ReactJS:生成带唯一key的多JSX元素的极简方案

简洁生成带合法key的重复JSX元素方案

嘿,我懂你想要更清爽写法的心情!之前用Array(10).fill(<span></span>)踩坑的原因有俩:一是所有元素都是同一个JSX实例(后续更新容易出问题),二是确实缺了React要求的唯一key。下面给你几个不用random、又足够简洁的解决方案:

1. 用Array.from直接生成(最简洁的 inline 写法)

Array.from支持第二个参数作为映射函数,比展开数组再map少一层嵌套,写法更紧凑:

{Array.from({ length: 10 }, (_, i) => <span key={i}></span>)}

这里用索引i当key完全合法——只要你的列表元素不会重新排序、新增/删除位置(这也是React官方允许用索引当key的场景),完全不用担心问题。

2. 封装复用小工具函数(多次使用更省心)

如果需要重复生成不同的重复元素,写个小函数复用会更爽:

const repeatJSX = (element, count) => 
  Array.from({ length: count }, (_, idx) => 
    React.cloneElement(element, { key: idx })
  )

用的时候直接传元素和数量就行,超级简洁:

{repeatJSX(<span></span>, 10)}
{repeatJSX(<div className="item"></div>, 5)}

React.cloneElement会帮你基于传入的元素创建新实例,并加上唯一的key,完美避开了fill带来的“同一实例重复渲染”问题。

为啥fill不能用?

补充一句:Array(10).fill(<span></span>)会把同一个对象填充到数组的每一项,React不仅会报key警告,而且当你后续想更新这些元素时,因为都是同一个引用,React无法正确区分它们的状态,很容易出奇怪的bug,所以这种写法一定要避开哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:07:33