;通过设置 key 属性来标识一组同级子元素在渲染前后是否保持不变.在实践中, 以上两个假设在绝大多数场景下都成立.2.1 Diffling算法描述不同类型的元素/组件当元素的标签或组件名发生变化, 直接卸载并替换以此元素作为根节点的整个子树...render() 方法.Diffing算法会递归比对新旧 render() 执行的结果.对子节点的递归当一组同级子节点(列表)的末尾添加了新的子节点时, 上述Diffing算法的开销较小; 但当新元素被插入到列表开头时..., Diffing算法只能按顺序依次比对并重建从新元素开始的后续所有子节点, 造成极大的开销浪费.解决方案是为一组列表项添加 key 属性, 这样React就可以方便地比对出插入或删除项了.关于 key...属性, 应稳定、可预测且在列表内唯一(无需全局唯一), 如果数据有ID的话直接使用此ID作为 key, 或者利用数据中的一部分字段哈希出一个key值.避免使用数组索引值作为 key, 因为当插入或删除元素后...Fiber, 同步地完成以下工作:构建Fiber链表: 为每个子元素创建Fiber, 并将父Fiber的 child 属性指向第一个子Fiber, 然后按顺序将子Fiber的 sibling 属性指向下一个子