这意味着当树上有1000个元素时, 需要10亿次比较, 显然远远不够高效.React在基于以下两个假设的基础上, 提出了一套复杂度为 O(n) 的启发式算法不同类型(即标签名、组件名)的元素会产生不同的树...;通过设置 key 属性来标识一组同级子元素在渲染前后是否保持不变.在实践中, 以上两个假设在绝大多数场景下都成立.2.1 Diffling算法描述不同类型的元素/组件当元素的标签或组件名发生变化, 直接卸载并替换以此元素作为根节点的整个子树....同一类型的元素当元素的标签相同时, React保留此DOM节点, 仅对比和更新有改变的属性, 如className、title等, 然后递归对比其子节点.对于 style 属性, React会继续深入对比..., 仅更新有改变的属性, 如color、fontSize等.同一类型的组件当组件的props更新时, 组件实例保持不变, React调用组件的 componentWillReceiveProps() componentWillUpdate...key值.避免使用数组索引值作为 key, 因为当插入或删除元素后, 之后的元素和索引值的对应关系都会发生错乱, 导致错误的比对结果.避免使用不稳定的key(如随机数), 因为每次渲染都会发生改变, 从而导致列表项被不必要地重建