在渲染数组项时正确选择React键



我最近一直在研究React中元素键的重要性,但我仍然有点困惑。

我有这种情况,有一个数据网格组件负责以行表示数据。实现了排序、过滤和分页。我从api获取行数据。

问题是:我应该如何正确地选择键映射函数元素(行)?

问题是已经获取的行数据可以在刷新之间更改(通过被其他用户编辑)。

我应该为关键属性使用唯一的id(例如nanoid)还是使用row.id?

如果我理解正确的话,使用row。Id将导致对已经加载的行不进行行呈现,即使更改了一些行数据。另一方面,使用唯一id(如nanoid)会对排序、过滤等性能产生负面影响。

我做得对吗?如何正确地做呢?

我同意更详细地研究这个键。这是我的理解。

如果我理解正确的话,使用row。即使更改了一些行数据,Id也会导致已经加载的行不重新呈现。

这不是真的,键的目的是识别项位置,所以当涉及到协调(将元素转换为节点)时,React知道是否可以重用节点(纤维)以加快更新过程。

让我们举个例子,如果最初的键顺序是

1 2 3

在重新排序之后,它在新的更新

中变成了以下内容
2 1 3

然后引导React使用键为1的节点更新项。项目被更新,在本例中,被更新到正确的位置。顺便说一句,在默认情况下,React不知道项目的顺序,对于React,它们看起来都很相似;)

我只给你一个基本的情况。但是您可以猜测其他情况,例如缺少一个键,或者添加了一个新键。

键应该始终是唯一的、稳定的(正如Brian上面提到的),并且永远不会在代码中被操纵(因此是稳定的)。

最好是唯一的ID。我见过有人传递整个user对象作为密钥。假设可能有重复的用户,这也可能是一个巨大的关键。

不要使用任何数组的索引作为键。

最新更新