v-if與v-show的區別


場景:

  1、使用element-ui中el-upload組件作圖片上傳

  2、上傳成功后來回切換tab

  3、tab是否顯示使用的是v-if

  (粗略圖)

問題:

  1、上傳成功后,圖片顯示,切換tab之后圖片不顯示

  2、來回切換,圖片的地址是一致的

問題分析:

  1、圖片是否顯示與圖片路徑有關

  2、console.log()以及查看元素,圖片地址一致,排除切換前后路徑不一致導致圖片顯示問題

  3、v-if的原理:v-if是通過控制dom節點的存在與否來控制元素的顯隱,來回切換tab導致元素銷毀、重建

問題解決:

  使用v-show代替v-if,避免銷毀和重建導致節點內部事件監聽和子組件。

問題延伸:v-if和v-show的區別,什么時候使用v-if或v_show?

  區別:1)v-if是通過控制dom節點的存在與否來控制元素的顯隱;v-show是通過設置DOM元素的display樣式,block為顯示,none為隱藏;

     2)編譯過程:v-if切換有一個局部編譯/卸載的過程,切換過程中合適地銷毀和重建內部的事件監聽和子組件;v-show只是簡單的基於css切換;

     3)編譯條件:v-if是惰性的,如果初始條件為假,則什么也不做;只有在條件第一次變為真時才開始局部編譯(編譯被緩存?編譯被緩存后,然后再切換的時候進行局部卸載); v-show是在任何條件下(首次條件是否為真)都被編譯,然后被緩存,而且DOM元素保留;

      4)性能消耗:v-if有更高的切換消耗;v-show有更高的初始渲染消耗;

  使用場景:如果需要非常頻繁地切換,則使用 v-show 較好;如果在運行時條件很少改變,則使用 v-if 較好。

  總結:v-if判斷是否加載,可以減輕服務器的壓力,在需要時加載,但有更高的切換開銷;v-show調整DOM元素的CSS的dispaly屬性,可以使客戶端操作更加流暢,但有更高的初始渲染開銷。如果需要非常頻繁地切換,則使用 v-show 較好;如果在運行時條件很少改變,則使用 v-if 較好。

 

參考: https://www.jianshu.com/p/7af8554d8f08 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM