深入vue中key的作用:diff算法下dom节点的高效复用key的原理也会一知半解。当我长期使用vue的时候,回过头来看key的原理的时候,完全明白了key的原理和作用。VirtualDomrendering如果想了解key的原理,就绕不开virtualdom的渲染过程,因为key最大的作用就是标识节点,让相同的节点可以高效复用。在vue渲染过程中,vue首先会生成一个虚拟dom,即用JavaScript中的对象来完整描述真实的dom节点。生成的虚拟dom类似如下:[{tagName:'div',children:[{tagName:'p',props:{class:'row'}//...}],props:{id:'app'}//...}]生成虚拟dom后,通过虚拟dom渲染出真实的节点,而页面则页面分为两部分,真实dom节点和虚拟dom节点。当你修改dom节点时,虚拟dom会重新生成。此时页面有新旧两棵虚拟dom树。Vue会比较这两个虚拟dom对象,直接复用完全相同的虚拟dom对应的真实dom节点。更新了真实DOM的部分。这个比较过程就是所谓的差异算法。这个过程最大限度地减少了真实DOM的更新,从而使性能更好。key的使用是在比较虚拟dom的过程中。如果没有key,vue会采用就地复用的原则,即按顺序比较节点,例如:当你插入一条数据时
- oldnodenewnode
- 1
- 1
- 2
- 5
- 3
- 2
- 4
- 3
- 4
- 旧节点新节点
- oldnodenewnode