Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
初探 Vue 3.0 Function API
Search
Kuro Hsu
August 06, 2019
Programming
4
3k
初探 Vue 3.0 Function API
v-tw meetup #03 @ LINE TW
2019/08/06
Kuro Hsu
August 06, 2019
Tweet
Share
More Decks by Kuro Hsu
See All by Kuro Hsu
Laravel x Vite
kurotanshi
0
640
[.NET Conf 2020 Taiwan] 以輕前端視角進入 Vue 3.0 的世界
kurotanshi
0
750
[MOPCON 2020] vite: Make web dev fast again
kurotanshi
0
2.4k
[ModernWeb'20] Vue.js :The Bad Parts
kurotanshi
1
130
[MOPCON 2019] Vue.js 3.0 與 Composition API 的變革
kurotanshi
1
1.3k
[JSDC2019] 我有一堆選擇 Vue 開發框架的理由
kurotanshi
1
780
[COSCUP 2019] 前端工程師的養成之路與開源工具
kurotanshi
3
420
VueJS Style Guide 導讀
kurotanshi
6
1.8k
[JSDC2017] 從 VueJS 看前端生態圈的發展變化
kurotanshi
9
2.4k
Other Decks in Programming
See All in Programming
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
2
820
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
650
オープンソースソフトウェアへの解像度🔬
utam0k
17
3.1k
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
380
Google Opalで使える37のライブラリ
mickey_kubo
3
150
CSC509 Lecture 07
javiergs
PRO
0
250
マンガアプリViewerの大画面対応を考える
kk__777
0
310
はじめてのDSPy - 言語モデルを『プロンプト』ではなく『プログラミング』するための仕組み
masahiro_nishimi
4
16k
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
100
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
260
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
500
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
4
910
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Being A Developer After 40
akosma
91
590k
Raft: Consensus for Rubyists
vanstee
140
7.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Embracing the Ebb and Flow
colly
88
4.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Designing for Performance
lara
610
69k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Transcript
初探 Vue 3.0 Function API Kuro Hsu @ LINE TW
v-tw meetup #003 2019/08/06
Kuro Hsu - Organizers of Vue.js Taiwan - https://kuro.tw -
[email protected]
- @kurotanshi
社群現況
Vue.js Taiwan https://vue.tw
超過九成的報名者在⼗十秒內 完成報名
下次的活動... 規劃中 敬請期待
關於 Vue 3.0 的進展
好消息
None
None
壞消息
None
3.0 多了了哪些新特性
Vue 3.0 RFC https://github.com/vuejs/rfcs
• ⽬目標是更更⼩小、更更快 • 加強對 TypeScript 的⽀支援 • 加強 API 設計⼀一致性
• 提⾼高可維護性 • 開放更更多底層功能
• Object.defineProperty -> Proxy API • Virtual DOM 重構 •
增強編譯時的優化 • 更更多細節請參參閱尤⼤大在 VueConf 2019 的演講: https://docs.google.com/presentation/d/ 1giA0aF6b5kljg42NUYVTB5bMxxgAc2iRVPVDo2s TirI/edit
Class API • 為了了增強與 TypeScript 的⽀支援 • 與現有 API 的相容性差異異太⼤大
• 瀏覽器對原⽣生 Class API 的⽀支援還不夠完整 • 標準對 class fields, decorators 等提案還不穩定
Class API • 為了了增強與 TypeScript 的⽀支援 • 與現有 API 的相容性差異異太⼤大
• 瀏覽器對原⽣生 Class API 的⽀支援還不夠完整 • 標準對 class fields, decorators 等提案還不穩定 CANCELED
Vue 3.0 Function-based API
• ⼜又稱 composition functions • 以「組合代替繼承」來來實作元件的複⽤用 • 更更靈活的程式邏輯複⽤用 • 對
TypeScript 的類型推導⽀支援更更好 • Tree-shaking friendly、編譯後程式碼更更容易易被壓縮 Vue 3.0 Function-based API
對比過去其他做法
Mixins
Mixins • ❌ 可能造成 Namespace 的衝突 • ❌ 從 Mixins
引入的屬性難以追蹤來來源
HOC: Higher-order Components
HOC: Higher-order Components • ❌ Props 來來源不清晰 • ❌ Props
namespace 衝突問題 • ❌ 多餘的元件實體造成性能浪費
Renderless Components
Renderless Components • ✅ 資料來來源清晰 • ✅ 無 namespace 衝突問題
• ❌ 多餘的元件實體造成性能浪費
Vue 3.0 Function- based API
• ✅ 資料來來源清晰 • ✅ 無 namespace 衝突問題 • ✅
不會產⽣生多餘的元件實體 Vue 3.0 Function-based API
None
https://github.com/vuejs/vue-function-api
Install
setup ( ) • 將共⽤用邏輯放在 setup 函式 • 第⼀一個參參數是 props
• setup( ) 內無法透過 this 存取⽬目前元件, 但可以透過第⼆二個 context 參參數取得對應 的屬性 • 最後透過 return 的物件來來與元件實體溝通
value( ) • value( ) 會為元件⽣生成⼀一個響應式 的屬性 (如同原本的 data) •
存取時透過 value( ) 的回傳 的 .value 屬性即可
state( ) • 未透過 value( ) 包裝的響應式物 件 • 意義上等同於
v2.x 的 Vue.observable( )
computed( ) • 與 v2.x computed 屬性的⾏行行爲、 作⽤用完全⼀一樣
watch( ) • 透過 watch 追蹤某個狀狀態的變化, 同時呼叫 callback function •
第⼀一個參參數是狀狀態來來源,第⼆二個則 是對應的 callback function
Lifecycle hooks • 除了了 beforeCreated 之外的 Lifecycle hook 都可以透過 onXXX
的形式來來對應 • 另外新增了了 onUnmounted
Provide / Inject • 與 v2.x 的 provide、 inject 作⽤用
完全⼀一樣。
Let’s Demo: Todo List
https://github.com/kurotanshi/vue-function-api-demo
⼤大家關⼼心的事...
轉換成本
None
在社群 激戰 討論後, 更更新後的 RFC 已取消此策略略 來源: https://github.com/vuejs/rfcs/commit/6fe6f7be06dd5982be3c57e248fcd66cd55748e0
https://suspicious-mclean-0e54c3.netlify.com/
轉換成本 === 0
• 已知 2.x -> 3.x 不會有 Breaking Change,完全相容現有 API •
新版本更更多的是底層的改寫,對多數開發者來來說沒有明顯差距 • 就是需要回饋才設有 RFC,有意⾒見見歡迎⾄至 RFC 反應
⚠ 投資⼀一定有風險,開發前應詳閱公開說明書 ⚠
Thanks