Reactjs 什么';React文档中突变的含义是什么? 首先 第二 首先 第二 第三

Reactjs 什么';React文档中突变的含义是什么? 首先 第二 首先 第二 第三,reactjs,react-dom,Reactjs,React Dom,React将匹配两个第一个树,匹配两个第二个树,以及 然后插入第三棵树 公爵 维拉诺瓦 康涅狄格州 公爵 维拉诺瓦 React将使每个孩子都发生变异,而不是意识到它可以保持健康 杜克和维拉诺瓦子树完好无损。这 效率低下可能是个问题 我很难理解他们所说的“反应会使每个孩子变异”是什么意思 这可以从他们的网站上找到:在您的第一个示例中,列表中的现有项不会改变位置。当添加第三项时,它们仍然是列表中的第一项和第二项。React识别出这一点,将前两项单独保留,并添加第一项 在第二个示例中,Duk

React将匹配两个第一个树,匹配两个第二个树,以及 然后插入第三棵树

  • 公爵
  • 维拉诺瓦
  • 康涅狄格州
  • 公爵
  • 维拉诺瓦
React将使每个孩子都发生变异,而不是意识到它可以保持健康 杜克维拉诺瓦子树完好无损。这 效率低下可能是个问题

我很难理解他们所说的“反应会使每个孩子变异”是什么意思


这可以从他们的网站上找到:

在您的第一个示例中,列表中的现有项不会改变位置。当添加第三项时,它们仍然是列表中的第一项和第二项。React识别出这一点,将前两项单独保留,并添加第一项

在第二个示例中,
Duke
Villanova
将位置从第一和第二分别更改为第二和第三。React不知道您刚在开始时添加了一项。它认为所有3个项目都是新的,因此删除所有3个项目,并重新渲染它们。如果您有一个很长的列表,那么这可能会花费大量时间


这就是为什么唯一的s很重要。

如果您试图使用

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

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

您会注意到react将要求您为数组的每个元素提供一个键。react所做的是跟踪属于父级的数据的每个成员,以便在删除或添加更多数据时,react知道如何有效地进行调整。否则,数据中的更改将被视为变异并呈现为新的数据集,这可能是一个问题,尤其是当数据增长时。

变异为“更改”。这是否意味着每次从第二棵树中找到新的子元素时,他们都会创建一个全新的树?文档只是说,当您保持顺序时,协调算法可以在最后一个子项之后快速插入或删除子项(从而更快地更新DOM)。但是如果您不保留顺序并从一开始就插入它,那么React必须检查每个新的子级并将它们重新插入到更新的DOM中。哦,现在我明白了。在第二种情况下,它必须遍历每个元素并将其添加到新树中,因为它没有添加到列表的末尾。谢谢你的解释!请注意,React提供了调解此问题的键。键允许React知道插入了哪个项,而不必重新插入每个子项,因为子项没有插入。此外:为什么设置唯一键很重要,因为:“如果键是索引,移动项会改变它。因此,受控输入之类的组件状态可能会以意外方式混淆和更新。”
<ul>
  <li>Duke</li>
  <li>Villanova</li>
</ul>

<ul>
  <li>Connecticut</li>
  <li>Duke</li>
  <li>Villanova</li>
</ul>
array.map()