vue中v-show和v-if的異同

  • 2019 年 10 月 4 日
  • 筆記

一、官方解釋:

  1. v-if 是「真正」的條件渲染,因為它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷毀和重建。
  2. v-if 也是惰性的:如果在初始渲染時條件為假,則什麼也不做——直到條件第一次變為真時,才會開始渲染條件塊。
  3. 相比之下,v-show 就簡單得多——不管初始條件是什麼,元素總是會被渲染,並且只是簡單地基於 CSS 進行切換。
  4. 一般來說,v-if 有更高的切換開銷,而 v-show 有更高的初始渲染開銷。因此,如果需要非常頻繁地切換,則使用 v-show 較好;如果在運行時條件很少改變,則使用 v-if 較好。

二、個人理解:

  1. 相同點:v-show和v-if都能控制元素的顯示和隱藏。
  2. 不同點:
  • 實現本質方法不同
    • v-show本質就是通過設置css中的display設置為none,控制隱藏
    • v-if是動態的向DOM樹內添加或者刪除DOM元素
  • 編譯的區別
    • v-show其實就是在控制css
    • v-if切換有一個局部編譯/卸載的過程,切換過程中合適地銷毀和重建內部的事件監聽和子組件
  • 編譯的條件
    • v-show都會編譯,初始值為false,只是將display設為none,但它也編譯了
    • v-if初始值為false,就不會編譯了
  • 性能
    • v-show只編譯一次,後面其實就是控制css,而v-if不停的銷毀和創建,故v-show性能更好一點。
    • 注意點:因為v-show實際是操作display:" "或者none,當css本身有display:none時,v-show無法讓顯示
    • 總結:如果要頻繁切換某節點時,使用v-show(無論true或者false初始都會進行渲染,此後通過css來控制顯示隱藏,因此切換開銷比較小,初始開銷較大),如果不需要頻繁切換某節點時,使用v-if(因為懶載入,初始為false時,不會渲染,但是因為它是通過添加和刪除dom元素來控制顯示和隱藏的,因此初始渲染開銷較小,切換開銷比較大)