
每当组件的关键更改发生时,React都会创建一个新的组件实例,而不是更新当前实例,因此,为了提高性能,使用Math.random()至少可以说是次优的。
同样,如果您将以任何方式对组件列表进行重新排序,则使用索引作为键 也
无济于事,因为React协调器将无法仅在与组件相关联的现有DOM节点周围移动,而是必须重新-为每个列表项创建DOM节点,它们将再次具有次佳的性能。
但是重申一下,这仅在您要对列表进行重新排序时才是问题,因此,在您的情况下,如果您确定 不会 以任何方式 对列表进行重新排序
,则可以安全地将index用作键。
但是,如果您确实打算对列表进行重新排序(或者只是为了安全起见),那么我将为您的实体生成唯一的ID-如果没有可以使用的预先存在的唯一标识符。
添加ID的一种快速方法是仅 在首次接收(或创建)列表时 映射列表并将索引分配给每个项目。
const myItemsWithIds = myItems.map((item, index) => { ...item, myId: index });这样,每个项目都会获得唯一的静态ID。
tl; dr如何为新人找到钥匙找到答案
如果您的列表项具有唯一ID(或其他唯一属性),请使用该ID作为键
如果可以组合列表项中的属性以创建唯一值,请将该组合用作键
如果以上方法均无效,但您可以保证不会以任何方式对列表进行重新排序,则可以将数组索引用作键,但是最好在列表出现时将自己的ID添加到列表项中首次收到或创建(请参见上文)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)