v-if 和 v-show 的區別
兩個重點【dom】和【生命周期】
- v-if
- 惰性指令,false 不會被編譯、渲染
- 不會存在 DOM 中
- 切換開銷大,需要重新創建元素
- 值變化,使用 v-if 的組件生命周期執行順序
true?
變為?false【組件的銷毀】
- beforeDestroy /?beforeUnmounted
- destroyed /?unmounted
false
變為true 【執行全部生命周期函數】
- beforeCreate
- created
- beforeMount
- mounted
- beforeUpdate
- updated
- beforeDestroy / beforeUnmounted
- destroyed / unmounted
- v-show
- 非惰性,會被渲染
- 使用 display: none 控制
- 切換開銷小
- 頻繁切換選擇 v-show
- 值變化,不會觸發生命周期函數
v-if 和 v-for 為什么不能同時用,同時用的優先級如何
-
v-for
?的時候,建議設置key
值,并且保證每個key
值是獨一無二的,這便于diff
算法進行優化 - 在?
Vue2
?當中,v-for 的優先級更高- 同時用帶來性能浪費
- 每次都會先循環,再進行條件判斷
- 可以外層使用 template 加 v-if, 內層使用 v-for
- 在?
Vue3
?當中,則是 v-if 的優先級更高。- 先判斷再循環
- 有無法取到 v-for 當中遍歷的 item 的問題,參考