Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Vue.js 3.0 與 Composition API 變⾰革 Kuro Hsu
Slide 2
Slide 2 text
Kuro Hsu - Front-End Developer - Organizers of Vue.js Taiwan - https://kuro.tw -
[email protected]
- @kurotanshi
Slide 3
Slide 3 text
Vue 3.0 發展近況 • 10/05 發布 pre-alpha 原始碼 • 預計 Q1 2020 推出正式版本 • Vue Roadmap - https://github.com/vuejs/vue/ projects/6
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
• ⽬目標是更更⼩小、更更快 • 加強對 TypeScript 的⽀支援 • 加強 API 設計⼀一致性 • 提⾼高可維護性 • 開放更更多底層功能
Slide 7
Slide 7 text
• Object.defineProperty -> Proxy API • Virtual DOM 重構 • 增強編譯時的優化
Slide 8
Slide 8 text
https://github.com/vuejs/vue-next
Slide 9
Slide 9 text
Class API • 為了了增強與 TypeScript 的⽀支援 • 與現有 API 的相容性差異異太⼤大 • 瀏覽器對原⽣生 Class API 的⽀支援還不夠完整 • 標準對 class fields, decorators 等提案還不穩定
Slide 10
Slide 10 text
Class API • 為了了增強與 TypeScript 的⽀支援 • 與現有 API 的相容性差異異太⼤大 • 瀏覽器對原⽣生 Class API 的⽀支援還不夠完整 • 標準對 class fields, decorators 等提案還不穩定 CANCELED
Slide 11
Slide 11 text
Composition API
Slide 12
Slide 12 text
! Composition API • 先前叫 function-based API • 以「組合代替繼承」來來實作元件功能的複⽤用 • 對 TypeScript 類型推導的⽀支援更更好 • Tree-shaking friendly、編譯後程式碼更更容易易被壓縮
Slide 13
Slide 13 text
對比過去做法
Slide 14
Slide 14 text
Mixins 可能造成 Namespace 的衝突 從 Mixins 引入的 options 難以追蹤來來源
Slide 15
Slide 15 text
Mixins
Slide 16
Slide 16 text
HOC: Higher-order Components
Slide 17
Slide 17 text
Props 來來源不清晰 Props namespace 衝突問題 多餘的元件實體造成性能浪費 HOC: Higher-order Components
Slide 18
Slide 18 text
Renderless Components
Slide 19
Slide 19 text
Renderless Components options 來來源清晰 無 namespace 衝突問題 多餘的元件實體造成性能浪費
Slide 20
Slide 20 text
資料來來源清晰 無 namespace 衝突問題 不會產⽣生元件實體造成性能浪費 Composition API
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
https://github.com/vuejs/composition-api/ Install
Slide 23
Slide 23 text
setup ( ) • 將共⽤用邏輯放在 setup 函式 • setup( ) 沒有 this • 透過 context 參參數取得原本在 this 對應的屬性 • 將需要暴暴露的屬性 return 出去
Slide 24
Slide 24 text
ref( ) • ref( ) 會為元件⽣生成⼀一個 響應式的屬性 (同原本的 data) • 透過 value 屬性存取
Slide 25
Slide 25 text
reactive( ) • 意義上等同於 v2.x 的 Vue.observable( ) • 無需透過 .value 存取
Slide 26
Slide 26 text
watch( ) • 與 v2.x 的 watch 同樣
Slide 27
Slide 27 text
computed( ) • 與 v2.x computed 屬性的⾏行行爲、作⽤用 完全⼀一樣
Slide 28
Slide 28 text
Lifecycle hooks • 將原本 Lifecycle hooks 透過 onXXX 的形式來來對應
Slide 29
Slide 29 text
No content
Slide 30
Slide 30 text
https://github.com/kurotanshi/vue-composition-api-demo
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
No content
Slide 33
Slide 33 text
No content
Slide 34
Slide 34 text
No content
Slide 35
Slide 35 text
No content
Slide 36
Slide 36 text
與 React Hooks 對比 • 兩兩者同樣為了了處理理邏輯組合與複⽤用問題 • Vue setup( ) 只會在 init 被呼叫⼀一次 • 沒有 State Hooks 的閉包陷阱 • 沒有內聯聯函式 callback 導致⼦子組件不斷被觸發更更新問題
Slide 37
Slide 37 text
https://slides.com/hunterliu1003/vue-rfcs/ 其他沒提到的 3.0 特性
Slide 38
Slide 38 text
新⼿手入坑 應該等到 3.0 釋出再學嗎?
Slide 39
Slide 39 text
• 官⽅方保證 2.x -> 3.x ,完全相容現有 API • 加強對 TypeScript ⽀支援 !== 只能⽤用 TypeScript • 更更多的是針對底層的改寫,對多數開發者來來說沒有明顯差距
Slide 40
Slide 40 text
期待 Vue 3.0 早⽇日到來來
Slide 41
Slide 41 text
Vue.js Taiwan https://vue.tw
Slide 42
Slide 42 text
Thanks