1. 程式人生 > >vue總結的知識點

vue總結的知識點

-a 搜索引擎 毫秒 rip 模式 efi 上進 調用 事件監聽

1、Vue生命周期鉤子,都是幹嘛用的?


Vue實例從創建到銷毀的過程,就是生命周期。
Vue的生命周期包括:開始創建、初始化數據、編譯模板、掛載Dom、渲染→更新→渲染、卸載等一系列過程。
在Vue的整個生命周期中,提供了一系列的事件,可以註冊JavaScript方法,達到控制整個過程的目的,在這些JavaScript方法中的this直接指向的是vue的實例。
在Vue的整個生命周期中,實例可以調用一些生命周期鉤子,這提供了執行自定義邏輯的機會。
Vue提供的生命周期鉤子如下:
① beforeCreate
在實例初始化之後,數據觀測(data observer,開始監控Data對象數據變化)和初始化事件(init event,Vue內部初始化事件)之前被調用。
② created
在實例已經創建完成之後被調用。實例已完成以下的配置:數據觀測(data observer),屬性和方法的運算,event事件回調。掛載階段尚未開始,$el 屬性不可見。
③ beforeMount
在掛載開始之前被調用。相關的render函數首次被調用。實例已完成以下的配置:編譯模板,把data裏面的數據和模板生成html。註意此時還沒有掛載html到頁面上。
④ mounted
在el 被新創建的 vm.$el 替換,並掛載到實例上去之後調用。實例已完成以下的配置:用上面編譯好的html內容替換el屬性指向的DOM對象。此時模板中的html渲染到了html頁面中,此時一般可以做一些Ajax操作。註意mounted只會執行一次。
⑤ beforeUpdate
在數據更新之前調用,發生在虛擬DOM重新渲染和打補丁之前。可以在該鉤子中進一步地更改狀態,不會觸發附加的重渲染過程。
⑥ updated
在由於數據更改導致的虛擬DOM重新渲染和打補丁之後調用。調用時,組件DOM已經更新,所以可以執行依賴於DOM的操作。然而在大多數情況下,應該避免在此期間更改狀態,因為這可能會導致更新無限循環。該鉤子在服務器端渲染期間不被調用。
⑦ beforeDestroy
在實例銷毀之前調用。實例仍然完全可用。
⑧ destroyed
在實例銷毀之後調用。調用後,所有的事件監聽器會被移除,所有的子實例也會被銷毀。該鉤子在服務器端渲染期間不被調用。
⑨ activated和deactivated配合keep-alive標簽使用
activated
和上面的beforeDestroy和destroyed用法差不多,但是如果我們需要一個實例,在銷毀後再次出現的話,用beforeDestroy和destroyed的話,就太浪費性能了,實例被激活時使用,用於重復激活一個實例的時候
⑩ deactivated
實例沒有被激活時

2、Vue數據雙向綁定原理,以及各個階段的綁定順序,手寫一下object.defineproperty實現的過程
首先傳輸對象的雙向數據綁定 Object.defineProperty(target, key, decription),在decription中設置get和set屬性(此時應註意description中get和set不能與描述屬性共存)
數組的實現與對象不同。
同時運用觀察者模式實現wather,用戶數據和view視圖的更新

3、methods、computed、watch區別

methods:事件調用的鉤子
computed:
// 計算屬性是根據他依賴的值計算的,當依賴值發生變化,其跟著改變
// 計算屬性是依賴緩存

watch: {
// watch 和 computed 區別:
// watch 強調的是 觀測某個狀態,根據狀態的改變而做事情
// 而computed 強調的是 根據狀態返回一個新的狀態

4、v-if 和v-show區別
(1)相同點:v-if 和 v-show 動態控制dom元素顯示隱藏。
(2)不同點:v-if顯示隱藏是將dom元素整個添加或刪除,(例如:<div v-if=""></div> ,v-if 當值為 true時,顯示div ,當值為false時,改元素消失,代碼也會消失,相當於將代碼刪除了,當在為true時,頁面會重新渲染div);而v-show顯示隱藏只是將css屬性設為display: block 或none。dom元素還在。
(3)編譯過程:v-if切換有一個局部編譯/卸載的過程,切換過程中合適地銷毀和重建內部的事件監聽和子組件;v-show只是簡單的基於css切換。
(4)編譯條件:v-if是惰性的,如果初始條件為假,則什麽也不做;只有在條件第一次變為真時才開始局部編譯(編譯被緩存?編譯被緩存後,然後再切換的時候進行局部卸載); v-show是在任何條件下(首次條件是否為真)都被編譯,然後被緩存,而且DOM元素保留。
(5)性能消耗:一般的,v-if有更高的切換消耗,而v-show有更多的初始化渲染消耗。
(6)使用場景:如果需要頻繁的切換而對安全性無要求,使用v-show。如果在運行時,條件不可能改變,則使用v-if較好。

5、Vuex用過哪些方法,如何在項目中使用它
Store
表示對Vuex對象的全局引用。組件通過Store來訪問Vuex對象中的State
State
Vuex對象的狀態,即其所擁有的數據
Getter
相當於Store的計算屬性。因為就像計算屬性一樣,Getter 的返回值會根據它的依賴被緩存起來,且只有當它的依賴值發生了改變才會被重新計算。下面會說到具體的使用場景
Mutation
定義了對State中數據的修改操作。組件使用State中的數據的時候並不能直接對數據進行修改操作,需要調用Mutation定義的操作來實現對數據的修改。這也是Vuex定義中所說的用相應的規則來讓數據發生變化的具體實現
Action
Mutation中定義的操作只能執行同步操作,Vuex中的異步操作在Action中進行,Action最終通過調用Mutation的操作來更新數據

2.vuex用過dispatch(),commit(),mapstate,mapgetters,mapmutation,mapaction。

3.在項目中的使用:首先通過npm install vuex --save安裝vuex,在項目的源代碼文件夾下(如src文件夾)新建一個store文件夾(叫別的名字也行)。store文件夾下新建一個store.js文件,用來存放Vuex實例。可以把store註入到在vue實例中,那麽所有的組件都可以通過this.$store.state去調用。
流程:vue Components使用dispatch()方法觸發action裏面的函數,通過在Action裏面寫公共的異步調用獲取數據,供公共的組件渲染。Action使用commit()方法觸發mutations裏面的函數,Mutations去修改state,state重新render vue Components。
4.vuex的使用便於大型項目管理,Store包含多個Module,Module包含State、Mutation和Action。
5.mutation和action寫在methods中
6.getters和state寫在computed中.

6、服務端渲染nuxt相關問題
與傳統 SPA(Single-Page Application - 單頁應用程序)相比,服務器端渲染(SSR)的優勢主要在於:
更好的 SEO,由於搜索引擎爬蟲抓取工具可以直接查看完全渲染的頁面請註意,截至目前,Google 和 Bing 可以很好對同步 JavaScript 應用程序進行索引。在這裏,同步是關鍵。如果你的應用程序初始展示 loading 菊花圖,然後通過 Ajax 獲取內容,抓取工具並不會等待異步完成後再行抓取頁面內容。也就是說,如果 SEO 對你的站點至關重要,而你的頁面又是異步獲取內容,則你可能需要服務器端渲染(SSR)解決此問題。
更快的內容到達時間(time-to-content),特別是對於緩慢的網絡情況或運行緩慢的設備。無需等待所有的 JavaScript 都完成下載並執行,才顯示服務器渲染的標記,所以你的用戶將會更快速地看到完整渲染的頁面。通常可以產生更好的用戶體驗,並且對於那些「內容到達時間(time-to-content)與轉化率直接相關」的應用程序而言,服務器端渲染(SSR)至關重要。
使用服務器端渲染(SSR)時還需要有一些權衡之處:
開發條件所限。瀏覽器特定的代碼,只能在某些生命周期鉤子函數(lifecycle hook)中使用;一些外部擴展庫(external library)可能需要特殊處理,才能在服務器渲染應用程序中運行。
涉及構建設置和部署的更多要求。與可以部署在任何靜態文件服務器上的完全靜態單頁面應用程序(SPA)不同,服務器渲染應用程序,需要處於 Node.js server 運行環境。
更多的服務器端負載。在 Node.js 中渲染完整的應用程序,顯然會比僅僅提供靜態文件的 server 更加大量占用 CPU 資源(CPU-intensive - CPU 密集),因此如果你預料在高流量環境(high traffic)下使用,請準備相應的服務器負載,並明智地采用緩存策略。
在對你的應用程序使用服務器端渲染(SSR)之前,你應該問的第一個問題是,是否真的需要它。這主要取決於內容到達時間(time-to-content)對應用程序的重要程度。例如,如果你正在構建一個內部儀表盤,初始加載時的額外幾百毫秒並不重要,這種情況下去使用服務器端渲染(SSR)將是一個小題大作之舉。然而,內容到達時間(time-to-content)要求是絕對關鍵的指標,在這種情況下,服務器端渲染(SSR)可以幫助你實現最佳的初始加載性能。
nuxt:
作用就是在 node.js 上進一步封裝,然後省去我們搭建服務端環境的步驟,只需要遵循這個庫的一些規則就能輕松實現 SSR。
可以作為一個 Node.js 應用跑在服務器上,也可以把整站直接編譯為靜態 HTML。另外這個框架支持自動生成路由,用來寫展示型的頁面是非常不錯的選擇。
NUXT 能為我們做什麽
無需再為了路由劃分而煩惱,你只需要按照對應的文件夾層級創建 .vue 文件就行
無需考慮數據傳輸問題,nuxt 會在模板輸出之前異步請求數據(需要引入 axios 庫),而且對 vuex 有進一步的封裝
內置了 webpack,省去了配置 webpack 的步驟,nuxt 會根據配置打包對應的文件

7、nextTick是什麽的意思?
$nextTick 是在下次 DOM 更新循環結束之後執行延遲回調,在修改數據之後使用 $nextTick,則可以在回調中獲取更新後的 DOM

vue總結的知識點