最近的开发中,有需求多个列表使用同一个table组件,在开发中正常编写,结果突然就报错了,报错信息如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR9EeVR1T1EEROBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2gTO3ETOzATM2ATOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
当时就蒙了,完全不知道错在哪里,后面一步步排查原因,刚开始以为是逻辑错了导致的,后面才发现是HTML层报错,原因是使用了v-if切换元素导致的,后面网上查资料,才知道,是因为表格是element-ui通过循环产生的,而vue在dom重新渲染时有一个性能优化机制,就是相同dom会被复用,这就是问题所在,所以,通过key去标识一下当前行是唯一的,不许复用,就行了。
我这里是在v-if 后面加上了 :key=“Math.random()”
<el-table :data="tableData"
class="push_data"
v-loading="loading"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
tooltip-effect="light"
>
<el-table-column v-if="msgType !== 5"
:key="Math.random()"
label="消息内容"
:show-overflow-tooltip="true"
></el-table-column>
</el-table>