简单了解一下Diff算法
React为了提升渲染方面的性能,在内部维持了一个虚拟dom(virtul DOM),当渲染结构有所变化的时候,会在虚拟dom中先用diff算法先进行一次对比,将所有的差异化解决之后,再一次性根据虚拟dom的变化,渲染到真实的dom结构.
key属性的使用
关于key属性的使用,涉及到diff算法中同级节点的对比策略,当我们使用指定的key值时,key值会作为当前组件的id,diff算法会根据这个id来进行匹配。如果遍历新的dom结构时,发现组件的id在旧的dom结构中存在,那么React会认为当前组件只是位置发生了变化,因此不会将旧的组件销毁重新创建,只会改变当前组件的位置,然后再检查组件的属性有没有发生变化,然后选择保留或修改当前组件的属性。如果没有显式指定key的值,React会把当前组件数据源的index作为默认的key值.
在实际开发使用中,我们需要注意什么呢?
首先,我们要确保key值的唯一,事实上如果key值不唯一的话,React只会渲染第一个,剩下的React会认为是同一项,直接忽略。其次,尽量避免使用index值作为组件的key值,使用index作为key不能保证一定是唯一的.