【发布时间】:2018-02-13 12:56:26
【问题描述】:
<ul>
<li>first</li>
<li>second</li>
</ul>
<ul>
<li>first</li>
<li>second</li>
<li>third</li>
</ul>
React 会匹配两个 first 树,匹配两个 second 树,然后 然后插入第三个树。
<ul>
<li>Duke</li>
<li>Villanova</li>
</ul>
<ul>
<li>Connecticut</li>
<li>Duke</li>
<li>Villanova</li>
</ul>
React 会改变每个孩子,而不是意识到它可以保持 Duke 和 Villanova 子树完好无损。这 效率低下可能是个问题。
我很难理解“React 会改变每个孩子”这句话的意思。
这可以从他们的网站上找到:https://reactjs.org/docs/reconciliation.html#recursing-on-children
【问题讨论】:
-
像“改变”一样变异。
-
这是否意味着每次从第二棵树中找到新的子元素时,他们都会创建一棵全新的树?
-
文档只是说当您保留顺序时,协调算法可以在最后一个孩子之后快速插入或删除一个孩子(因此更快的 DOM 更新)。但是如果你不保留顺序并从头开始插入,那么 React 必须遍历每个新的子节点并将它们重新插入到更新的 DOM 中。
-
哦,现在我明白了。在第二种情况下,它必须遍历每个元素并将其添加到新树中,因为它没有添加到列表的末尾。谢谢你的解释!
-
请注意,React 提供了密钥来调解这一点。 Keys 允许 React 知道插入了哪个,而不必重新插入每个孩子,因为它没有。