由於疫情五一假期也不能出去玩,只好在家擼代碼。html
正好昨天排查了一個問題,今天記錄一下。前端
問題是這樣的,有個頁面它裏面有兩個組件 1活動組件、2搜索組件,而後活動組件裏面有個評論留言的功能,測試同窗發現組件切換以後評論被清空了。
問題大致就這樣。由於活動不是我作的,我只負責排查問題,因此我也是聽別人的反饋來分析問題。vue
感興趣的朋友能夠實際下載APP去看一下,VV音樂-首頁輪播圖-五一假期與美同行
以下,切換以後 UI 還在,只是記錄數和評論沒了。面試
評論是公用的一個 js 實現,不是基於 Vue 的。(重點來了)緩存
到這裏問題已經比較清晰了,Vue 如何使用原生庫。通常來講遇到的問題分爲下面幾個。服務器
nextTick
的問題,由於你操做完數據以後,他並無渲染完畢呢。ref
來獲取。這個 Bug 還比較特殊,不是這裏面的,可是也有關係(和 3 的問題相似)。接來下出道面試題吧。微信
這面試題不陌生吧,想必你們也有答案。函數
v-if
根據表達式的值的來有條件地渲染元素。採用組件銷燬、重建的方式。測試
若是一開始就是 false
,那麼這個組件不會被建立(生命週期鉤子函數不會被調用)。spa
若是一開始是 true
,而後改成 false
,這個時候組件會被銷燬(destory 等生命週期鉤子函數都會執行)。以後若是再改成 true
,那麼會從新建立(created 等鉤子函數會執行)。
v-show
根據表達式的值的來有條件地渲染元素。是經過設置元素的 display
CSS 屬性來實現渲染效果。
無論是 true
仍是 false
都會渲染出組件。只不過爲 false
時 display:none
基於上面的分析咱們知道了,由於 v-if
致使組件被銷燬,而後再次渲染的時候是根據 Vue 中的數據來渲染的,並無 DOM 數據。
既然 v-show
不會銷燬,那麼咱們能夠緩存 v-show
。
這個方案的缺點
list && list.length
少不了這種代碼的存在既然 created
的時候是好的,那麼咱們切換以後再次調用一下初始化渲染不就能夠了。
這個方案的缺點
https://www.lilnong.top/stati...
補一下 DEMO,能夠看到一進去四個 input 都是有內容的。
切換以後 v-if 下面的input就有個丟值了。而 v-show 的不受影響。
能夠先在 keep-alive 組件中填入內容,而後切換,發現 v-if 的數據沒有了
歡迎你們關注個人公衆號。有疑問也能夠加個人微信前端交流羣。