当前位置: 首页 > 面试题库 >

为组件提供唯一键时,可以使用Math.random()生成那些键吗?

武卓
2023-03-14
问题内容

问题如下:

我有几千个元素的列表形式的数据。其中一些是重复项,然后可能还会有重复的密钥。因为我没有真正的“
ID”或任何能让我有机会将所有元素的ID赋予唯一键的东西,所以可以使用Math.random()吗?

据我了解,键主要是通过react来区分组件的。我认为就我的代码而言,这些键与我实际上没有任何关系,应该可以吗?为了确保不会有重复的数字,我不妨将两个数学随机数彼此相除以获得几乎确定的唯一键。

这是一个好习惯吗?我可以不用担心什么而使用它吗?


问题答案:

每当组件的关键更改发生时,React都会创建一个新的组件实例,而不是更新当前实例,因此,为了提高性能,使用Math.random()至少可以说是次优的。

同样,如果您将以任何方式对组件列表进行重新排序,则使用索引作为键
无济于事,因为React协调器将无法仅在与组件相关联的现有DOM节点周围移动,而是必须重新-为每个列表项创建DOM节点,它们将再次具有次佳的性能。

但是重申一下,这仅在您要对列表进行重新排序时才是问题,因此,在您的情况下,如果您确定 不会 以任何方式 对列表进行重新排序
,则可以安全地将index用作键。

但是,如果您确实打算对列表进行重新排序(或者只是为了安全起见),那么我将为您的实体生成唯一的ID-如果没有可以使用的预先存在的唯一标识符。

添加ID的一种快速方法是仅 在首次接收(或创建)列表时 映射列表并将索引分配给每个项目。

const myItemsWithIds = myItems.map((item, index) => { ...item, myId: index });

这样,每个项目都会获得唯一的静态ID。

tl; dr如何为新人找到钥匙找到答案

  1. 如果您的列表项具有唯一ID(或其他唯一属性),请使用该ID作为键

  2. 如果可以组合列表项中的属性以创建唯一值,请将该组合用作键

  3. 如果以上方法均无效,但您可以保证不会以任何方式对列表进行重新排序,则可以将数组索引用作键,但是最好在列表出现时将自己的ID添加到列表项中首次收到或创建(请参见上文)



 类似资料:
  • 接口说明 生成邀请成员时生成链接的唯一键 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /permissions/api/team/v1.0.0/generateTeamUniquekey 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN 响应

  • 接口说明 生成邀请成员时生成链接的唯一键 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /permissions/api/team/v1.

  • 问题内容: 我认为外键意味着单行必须引用单行,但是我正在查看某些表,但事实并非如此。表1在表2的列2上有一个具有外键约束的列1,但是在表2中有很多记录在列2中具有相同的值。在column2上也有非唯一索引。这是什么意思?外键约束是否仅表示至少一条记录必须存在,且在正确的列中具有正确的值?我认为这意味着必须有一个这样的记录(不确定空值是否适合图片,但目前我对此不太担心)。 更新:显然,此行为特定于M

  • 有时,当函数具有这样的签名时,它可能会变得毛茸茸的: 对于编译器来说,所有UUID都是相同的,因此希望在运行时被数据库捕获。 我喜欢jOOQ在编译时捕获许多问题的方式,我也想解决这个问题。我的目标是让每个表的每个键都有自己的类,并让这些字段正确生成pojos。 实现这一目标的最佳方法是什么?我想出了以下几点: 全面的JavaGenerator实现 具有大量强制类型映射的转换器,以及手动创建的键类

  • 使用提供函数生成的键与提供的对象相同的值创建一个对象。 使用 Object.keys(obj) 来迭代对象的键。 使用 Array.reduce() 创建一个具有相同值的新对象,并使用 fn 来映射键。 const mapKeys = (obj, fn) => Object.keys(obj).reduce((acc, k) => { acc[fn(obj[k], k, obj)] =

  • 本文向大家介绍主键与唯一键,包括了主键与唯一键的使用技巧和注意事项,需要的朋友参考一下 首要的关键 主键是一列,用于唯一地标识表的每个元组。 它用于向表添加完整性约束。一个表中只能使用一个主键。在主键的情况下,重复和NULL(空)值无效。主键也可以用作其他表的外键。 让我们举个例子 我们有一个表名employee,用于存储公司员工的数据。下表显示了该表的内容。 Emp_id 名称 号码 位置 薪水