Vue進階(么伍么):el-table-column :key應用
引言
在前端專案開發過程中,el-table
展示的結果列使用元件形式引入,其中某些欄位通過:formatter
方法轉碼,結果欄位的欄位顯示/隱藏控制也使用元件形式引入,前端在控制欄位顯示屬性時,發現碼值轉換及欄位資訊展示均有問題。
問題分析
通過閱讀程式碼結構,發現el-table-column
通過template
迴圈生成,由於template
的作用是模板佔位符,可幫助我們包裹元素,但在迴圈過程當中,template
不會被渲染到頁面上。有關表格資料渲染中key
的作用如下:
-
key
作為一個DOM
節點的標識值,結合Diff演算法
可以實現對節點的複用。(key
相同的節點會被複用); -
只有當
key
(或其他導致isSameNode
判斷為false
)發生改變時,才會觸發節點的重新渲染。否則Vue
將會複用之前的節點,通過改變節點的屬性來實現節點的更新。
同時,template
標籤不支援:key
屬性,
注意: vue例項繫結的元素內部的template標籤不支援v-show
指令,即v-show="false"
對template
標籤來說不起作用。但是此時的template
標籤支援v-if
、v-else-if
、v-else
、v-for
這些指令。
解決方法
既然template
標籤不支援key
屬性,可通過在el-table-column
標籤加入:key="Math.random()"
屬性,這個key屬性是vue自帶的特殊屬性,主要用在 Vue
的虛擬 DOM
演算法,在新舊 nodes
對比時辨識 VNodes
,依次來提升頁面渲染效能。如果不更新這個key
的話,顯示/隱藏列的時候,部分DOM
不會重新渲染,導致table
變化時候內容錯亂。
擴充閱讀
《Vue進階(么肆玖):Vue中template標籤的使用》
《Vue進階(么伍零):Vue key屬性詳解》
相關文章
- Haskell Monoid(么半群)的介紹HaskellMono
- GITHUB又出么蛾子?才讓機器人修復漏洞就又給黑客送上模組版權Github機器人黑客
- vue高階進階系列——用typescript玩轉vue和vuexVueTypeScript
- vue進階Vue
- 從回撥地獄到自函子上的么半群:解密熟悉又陌生的 Monad解密
- 函式進階應用3函式
- vue進階二Vue
- vue進階一Vue
- Go 泛型語法又出 “么蛾子”:引入 type set 概念和移除 type list 中的 type 關鍵字Go泛型
- Android應用開發進階Android
- 進階 Redis 技術與應用Redis
- Vue 進階之路(十四)Vue
- vue + typescript 進階篇VueTypeScript
- Android進階 - 應用啟動分析Android
- Vue的進階屬性Vue
- 說說 vue-router 元件的高階應用Vue元件
- Vue 進階系列(一)之響應式原理及實現Vue
- 能否手寫vue3響應式原理-面試進階Vue面試
- el-table 的 el-table-column 的key使用Math.random() 篩選列random
- Vue開發之路由進階Vue路由
- 並查集的初級應用及進階並查集
- 大型單頁面應用的進階挑戰
- 淺談 K-D Tree 及其進階應用
- 深入剖析Vue原始碼 - 元件進階Vue原始碼元件
- Vue 3 進階用法:非同步元件Vue非同步元件
- RxJS進階——關於流的理解和應用JS
- vue2進階篇:vue-router之命名路由Vue路由
- 技術進階:Kubernetes高階架構與應用狀態部署架構
- 沒有廢話的vue進階( 一 )Vue
- 「進階篇」Vue Router 核心原理解析Vue
- 進階!MacOS如何為指定的應用設定語言Mac
- Flutter進階:在應用中實現 Hero(飛行) 動畫Flutter動畫
- 線段樹進階應用學習筆記(二)+普通資料結構進階應用學習筆記(一)(2024.10.1)筆記資料結構
- VUE複習筆記30(vue-router詳解進階)Vue筆記
- vue從入門到進階:vue-router路由功能(九)Vue路由
- Java進階09 事件響應Java事件
- AWK高階應用
- Redis 高階應用Redis