[TOC]
vue官方说:
当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。
今天碰到个问题,在使用tab切换时,表格的列项顺序并不是定义的顺序123456789101112131415161718<div class="tabs"> <el-radio-group v-model="tabs" size="small" > <el-radio-button >列表1</ks-el-radio-button> <el-radio-button >列表2</ks-el-radio-button></div><section> <table> <template v-for="item in arr"> <col :key="item+'1'">a</col> <col :key="item+'2'">b</col> </template> </table></section>
当在切换tab的时候,想a列和b列的顺序是调换的,然而由于tab切换时两列的key没有变,先对比新旧dom的key变化,如果新的dom中key值没有变化(不管顺序),那么,尽管新dom的数据项顺序变了,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是使用旧dom的顺序。