THINK-2
Last updated
Was this helpful?
Last updated
Was this helpful?
THINK篇主要述說在寫Vue時的基本觀念
而大部分的資料都可以從官網獲得:
所有prop 都使其父子之間形成一個單向往下的綁定,父級prop的更新會向下流動到子組件中,但是反過來則不行,這樣可以防止子組件意外改變父級組件的狀態。
所以當父組件改變時,子組件會刷新成新的值。而我們只能透過 $emit
發送一個定義事件,通知父組件修改,然後再傳進來(也就是子組件不應該修改值)。
使用索引值,設置一個陣列項目時。ex:vm.items[IndexOfItem] = newValue
直接修改陣列長度時。ex:vm.items.length = newLength
加載渲染過程
父 BeforeCreate、Created、beforeMount
子 BeforeCreate、Created、beforeMount
子 Mounted、父 Mounted
子組件更新過程
父 BeforeUpdate
子 BeforeUpdate、Updated
父 Updated
父組件更新過程
父 BeforeUpdate、Update
銷毀過程
父 BeforeDestroy
子 BeforeDestroy、Destroyed
父 Destroyed
可於 Created、BeforeMount、Mounted 中進行使用,因為在這三個函數中,data 已經創建,而文獻中建議於Created中使用非同步請求。
原因:
更快獲取後端數據,減少頁面 Loading 時間
SSR 不支持 BeforeMount、Mounted 這些函數,所以放在 Created中有一致性。
在 Mounted 中,可以開始操作 DOM。
利用 @hook
監聽
為一個 Vue 內置的組件,可以使其組件保留狀態,避免重新渲染
一般結合路由和動態組件一起使用,用於緩存組件。
提供 include & exclude 屬性,兩者都支持字符串或正規表達式
include 只有名稱匹配的或被緩存
exclude 表示任何名稱匹配的都 不會 被緩存
exclude 優先級比 include 高
分別對應兩個鉤子函數
Activated:keep-alive 啟動時調用。
Deactivated:keep-alive 停用時調用。
因為組件是拿來復用的。而且如果組件中的 Data 是一個物件,那麼作用域將會沒有隔離。
如果組件中的 Data 是一個函數,那麼每個實例可以維護一份被返回對象的獨立拷貝,所以實例之間的Data 屬性值不會互相影響。
另外提到 new Vue 中的實例,因為不會被復用,故不存在引用對象的問題。
Vuex 是一個為Vue.js 應用程序開發的狀態管理模式。每一個Vuex的核心是倉庫(Store)。'store' 基本上包含著大部分的狀態(State)。
狀態儲存為響應式的,當Vue從 Store 讀取狀態時,如果狀態發生變化,那麼相應的組件也會相應地得到高效更新。
改變 Store 的唯一方法是為 commit mutation 這樣使得我們可以方便追蹤每一個狀態的改變。
名詞定義:
State:定義了應用狀態的數據結構,可以在這裡設置默認的初始狀態。
Getter:允許組件從Store 獲取數據,mapGetters輔助函數僅僅是將store 中的getter 映射到局部計算屬性。
Mutation:唯一更改Store 狀態的方法,必須是同步函數。
Action:用於提交Mutation,而不是直接變更狀態,可以包含任意非同步操作。
Module:允許將單一的Store 拆分為多個 Store,且同時保存在單一的狀態樹中。