React创建表格时出现列表子元素需唯一key prop警告如何解决?
问题原因
你在<thead>标签内通过fields.map循环生成<tr>元素时,没有为每个<tr>添加唯一的key属性,这就是警告的触发来源。你只给了<tbody>内的<tr>配置了key,所以之前的修改没有生效。
解决方案
给fields.map返回的最外层<tr>元素添加唯一key,优先使用field对象内的唯一标识字段(比如字段id、唯一的字段名等),如果没有唯一标识可以临时用循环索引(仅适合fields列表不会动态增删的场景)。
修正后的代码示例:
return ( <div className = "overflow-x-auto"> <table className="ranking_table table-auto border-collapse w-full" > <caption className="sr-only">{ caption }</caption> <thead> { fields.map((field, index) => ( {/* 这里添加key,优先用field内唯一值,比如field.id,没有再用index */} <tr key={field.id ?? index}> <th>{ field.player }</th> <th>{ field.total }</th> <th>{ field.exact }</th> <th>{ field.good } </th> </tr> )) } </thead> <tbody> { rows.map((row, loop) => ( <tr key={row.key}> <td> <span className={`rounded-full rank ranking-${loop + 1}`}>{ loop + 1 }</span> { row.username }, </td> <td> { row.cntTotal } </td> <td> { row.cntExact } </td> <td> { row.cntGood } </td> </tr> )) } </tbody> </table> </div> )
注意事项
- key必须是当前循环列表内的唯一值,不要使用随机数作为key,否则会导致组件不必要的重渲染、状态丢失等问题
- 所有通过数组map方法生成的JSX元素,都需要给返回的最外层元素添加唯一key属性
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

