React 文档中的mutation 是什么意思?

san*_*der 3 reactjs react-dom

<ul>
  <li>first</li>
  <li>second</li>
</ul>

<ul>
  <li>first</li>
  <li>second</li>
  <li>third</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

React 将匹配第一棵树,匹配第二棵树,然后插入第三棵树。

<ul>
  <li>Duke</li>
  <li>Villanova</li>
</ul>

<ul>
  <li>Connecticut</li>
  <li>Duke</li>
  <li>Villanova</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

React 会改变每个子树,而不是意识到它可以保持 DukeVillanova子树的完整。这种低效率可能是一个问题。

我很难理解他们所说的“React 会改变每个孩子”的意思。

这可以从他们的网站上找到:https : //reactjs.org/docs/reconciliation.html#recursing-on-children

Chr*_*ore 5

在你的第一个例子,在列表中的现有项目firstsecond不改变位置。添加第 3 项时,它们仍为列表中的第 1 项和第 2 项。React 识别出这一点并保留前两个项目,并添加第一个。

在第二个例子,Duke以及Villanova从第一和第二变化的位置,以分别将第二和第三。React 不知道您刚刚在开头添加了一个项目。它认为所有 3 个项目都是新的,因此删除所有 3 个项目,并重新渲染它们。如果您有很长的清单,这可能既昂贵又耗时。

这就是为什么 uniquekey很重要。

  • 除此之外:为什么设置**唯一键**很重要,因为:“如果键是一个索引,移动一个项目会改变它。因此,诸如受控输入之类的组件状态可能会在意想不到的方式。” (2认同)