作者回复: 和虚拟 DOM 对应的是实体 DOM,实体 DOM 是真正展示给用户看的 UI 背后的 DOM 结构。虚拟 DOM 只在内存中维护,当所有对其的修改完成后,React 将其应用到实体 DOM。应用的过程是找到所有虚拟 DOM 和当前实体 DOM 的区别(diff),从而高效的完成应用(修改实体 DOM)过程。理解了 diff 也就理解了虚拟 DOM。
作者回复: 嗯嗯,确实是个问题,无法精确定位哪个key重复。好的习惯就是一旦有这样的错误,立刻解决掉,否则积累多了会比较麻烦。
作者回复: 谬赞啦~
作者回复: 如果有兴趣可以看下相关的算法实现:https://grfia.dlsi.ua.es/ml/algorithms/references/editsurvey_bille.pdf ,这是 React 文档中提到的普通 tree 的 diff 算法。https://reactjs.org/docs/reconciliation.html
作者回复: ajax 在 didMount 或者 didUpdate 都可以,根据具体的需求。如果某个请求不会依赖属性变化,而是只在组件创建时执行,那么可以在 didMout。放在 didUpdate 则需要根据状态变化来判断是否要真的发起 ajax 请求。
作者回复: 来自于getSnapshotBeforeUpdate 这个生命周期方法。
作者回复: 可以用啊,有问题在guthub提issue
作者回复: 是的,如果用 typescript 或者 flow,就不需要 prop-types 做检查。
作者回复: 并没有减掉,在虚拟 dom diff 算法的介绍里有提到。