了解React.js阵中孩子唯一的键

阅读时长 4 分钟读完

在React中,你经常需要渲染一个列表或集合,例如一个购物车或者一个新闻列表。为了让React能够更好地管理这些元素,每个元素都需要有一个唯一的键(key)。在本文中,我们将深入探讨React中孩子唯一键的重要性以及如何正确使用它们。

孩子唯一键的作用

孩子键的作用是帮助React识别哪些组件已经改变了。当你重新渲染一个组件的时候,React 需要决定哪些元素是新的,哪些元素已经被删除,以及哪些元素已经存在但需要更新。孩子键就是React用来判断这些问题的重要标识符。

考虑下面这个例子:

-- -------------------- ---- -------
-------- ------------------- -
  ----- ----- - ------------
  ----- --------- - ---------------- --
    --------------------
  --
  ------ -
    ----
      -----------
    -----
  --
-

----- ----- - -
  ------ --------- --- ---
  ------ ---------- --- ---
  ------ ----------- --- ---
--

----------------
  ------------- ------------- ---
  -------------------------------
--

这个例子展示了一个简单的购物清单,其中每个项目都通过一个map()函数映射到一个<li>元素。但是,如果我们现在想要更改这个列表中的一个项目的名称,React将不知道哪个元素已经被修改了,从而导致整个列表的重新渲染。

为了解决这个问题,我们需要为每个孩子添加一个唯一的键标识符。在这个例子中,我们可以使用项目的ID作为键:

-- -------------------- ---- -------
-------- ------------------- -
  ----- ----- - ------------
  ----- --------- - ---------------- --
    --- ------------------------------
  --
  ------ -
    ----
      -----------
    -----
  --
-

----- ----- - -
  ------ --------- --- ---
  ------ ---------- --- ---
  ------ ----------- --- ---
--

----------------
  ------------- ------------- ---
  -------------------------------
--

现在,当我们更改其中一个项目的名称时,React将能够识别并仅重新渲染该特定项而不是整个列表。

如何选择一个好的键

选择一个好的键非常重要,因为它将直接影响React如何管理你的组件。以下是一些有用的提示来帮助你选择最佳键:

  • 稳定性: 选择一个稳定的标识符,例如ID或日期戳,以确保你的键不会随着时间的推移而改变。
  • 唯一性: 确保每个键都是唯一的。如果两个元素具有相同的键,则React将无法区分它们。
  • 简短性: 选择尽可能简短的键,以减少额外的开销。

实例代码

以下是一个完整的示例代码,演示了如何在React中使用孩子唯一键:

-- -------------------- ---- -------
------ ----- ---- --------

-------- ------------------- -
  ----- ----- - ------------
  ----- --------- - ---------------- --
    --- ------------------------------
  --
  ------ -
    ----
      -----------
    -----
  --
-

----- ----- - -
  ------ --------- --- ---
  ------ ---------- --- ---
  ------ ----------- ---

- ---------------------------------------------------------- --------
--------------------------------------------------------------------------------
纠错
反馈