Slide 1

Slide 1 text

我有⼀一堆選擇 Vue 框架的理理由 Kuro Hsu @ JSDC2019

Slide 2

Slide 2 text

Kuro Hsu - Organizers of Vue.js Taiwan - https://kuro.tw - kurotanshi@gmail.com - @kurotanshi

Slide 3

Slide 3 text

vue.tw 社群現況

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

今年年⾄至今成長近兩兩千⼈人次

Slide 7

Slide 7 text

• https://vue.tw • 每個⽉月⼀一次的實體聚會 (⽬目前主要在台北) • 活動票券幾乎在⼀一分鐘內秒殺 • 每場報到率 85% 以上 • 社團討論氣氛融洽 (?)

Slide 8

Slide 8 text

如何選擇⼯工具

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

如果你是新⼿手 • 看現在哪個 夯 / 潮 / 猛 / ⾼高⼤大上 就⽤用什什麼 • 看公司要我⽤用什什麼我就⽤用什什麼 • 因為我只會什什麼就⽤用什什麼 • 因為我剛學會什什麼就想⽤用什什麼

Slide 12

Slide 12 text

⼿手上拿著錘⼦子的⼈人 看什什麼都像釘⼦子

Slide 13

Slide 13 text

如果你是決策者 • 為了了解決現有的問題 • 降低完成任務的成本 • 排除未來來可能的遇到的問題

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

為什什麼要⽤用 Vue.js?

Slide 16

Slide 16 text

現在好好的 管他過去幹嘛

Slide 17

Slide 17 text

就是因為有痛到才要換

Slide 18

Slide 18 text

不然你也可以繼續⽤用 jQuery 啊 不瞞您說我也還在⽤用

Slide 19

Slide 19 text

「我」為什什麼選擇 Vue.js 開發

Slide 20

Slide 20 text

曾經我也是個冒險者 
 (2013)

Slide 21

Slide 21 text

(2015)
 
 ……

Slide 22

Slide 22 text

新技術的考量量 (當時) • React ? • JSX 沒⼈人懂 • 存在感太薄弱我忘了了為什什麼沒選它了了 • Angular 2 ? • RC ⼀一時爽,⼀一直 RC ... • 沒學 TypeScript

Slide 23

Slide 23 text

遇⾒見見 Vue.js 之後

Slide 24

Slide 24 text

新技術的考量量 (當時) • Vue.js • Syntax 與 ng1 有 87% 像,轉換成本低 • 夠輕量量、好上⼿手 • 正好⾜足夠負擔當時專案的複雜度 • 試 run 幾個⼩小專案之後就決定是它了了

Slide 25

Slide 25 text

Vue.js 快速簡介

Slide 26

Slide 26 text

Vue.js • 儘可能簡單的 API • 響應式的資料綁定 • 可組合式的視圖元件 • 只專注在視圖層 • 可以跟其他 library 整合

Slide 27

Slide 27 text

Library or Framework ?

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

「The Progressive JavaScript Framework」 Vue core Vue-router Vuex Vue-Cli Nuxt.js

Slide 30

Slide 30 text

指令式渲染 • 如 jQuery,以操作 DOM Node 為基礎的開 發模式 • 開發⽅方式直覺,透過 Selector 取得 DOM 就 開始操作 • 優點就是爽,但程式架構擴⼤大複雜後,程式 碼混雜不易易維護

Slide 31

Slide 31 text

宣告式渲染 • 以操作物件模型為基礎的開發模式。 • ⾏行行為關注點放在資料 ( Model ) 與狀狀態 • 直接描述 狀狀態 與 DOM 的映射關係,⽽而不 是直接操作 DOM • view = render(state) 
 state 輸入, DOM 輸出。

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

Vue Component

Slide 35

Slide 35 text

Component System UI 結構 組件樹

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

如何導入 Vue.js

Slide 41

Slide 41 text

直接引入 vue.js

Slide 42

Slide 42 text

Vue-Cli 建立專案 $ npm install @vue/cli -g $ yarn global add @vue/cli $ vue create 專案名稱

Slide 43

Slide 43 text

Vue-Cli 建立專案

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

Vue-loader

Slide 46

Slide 46 text

HTML Script Style

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

SPA or MPA

Slide 50

Slide 50 text

Vue-Router

Slide 51

Slide 51 text

Vue-Router

Slide 52

Slide 52 text

Multiple page vue.config.js

Slide 53

Slide 53 text

打包

Slide 54

Slide 54 text

打包 ⽣生成的檔案在 dist ⽬目錄下

Slide 55

Slide 55 text

專案開發週期 建立模板 初始化 開發 上線 靜態 HTML
 CSS Vue Template vue-cli Project initialize Mock Data Testing webpack dev server / proxy 打包 /
 建立 HTML 上傳 CDN 程式發布

Slide 56

Slide 56 text

Next - Vue 3.0

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

• 更更⼩小、更更快 • 加強對 TypeScript 的⽀支援 • 加強 API 設計⼀一致性 • 提⾼高可維護性 • 開放更更多底層功能

Slide 59

Slide 59 text

• Object.defineProperty -> Proxy API • Virtual DOM 重構 • 增強編譯時的優化

Slide 60

Slide 60 text

! Composition Functions • 之前叫 function-based API • 以「組合代替繼承」來來實作元件功能的複⽤用 • 對 TypeScript 類型推導的⽀支援更更好 • Tree-shaking friendly、編譯後程式碼更更容易易被壓縮

Slide 61

Slide 61 text

對比過去做法

Slide 62

Slide 62 text

Mixins

Slide 63

Slide 63 text

Mixins 可能造成 Namespace 的衝突 從 Mixins 引入的 options 難以追蹤來來源

Slide 64

Slide 64 text

HOC: Higher-order Components

Slide 65

Slide 65 text

Props 來來源不清晰 Props namespace 衝突問題 多餘的元件實體造成性能浪費 HOC: Higher-order Components

Slide 66

Slide 66 text

Renderless Components

Slide 67

Slide 67 text

Renderless Components options 來來源清晰 無 namespace 衝突問題 多餘的元件實體造成性能浪費

Slide 68

Slide 68 text

Composition Functions API

Slide 69

Slide 69 text

options 來來源清晰 無 namespace 衝突問題 沒有多餘的元件實體浪費 Composition Functions API

Slide 70

Slide 70 text

Composition Functions Converter https://suspicious-mclean-0e54c3.netlify.com/

Slide 71

Slide 71 text

與 React Hooks 對比 • 我知道⼀一定有⼈人會問所以我現在先講 • 兩兩者同樣為了了處理理邏輯組合與複⽤用問題 • Vue setup( ) 只會在 init 被呼叫⼀一次 • 沒有 State Hooks 的閉包陷阱 • 沒有內聯聯函式 callback 導致⼦子組件不斷被觸發更更新問題

Slide 72

Slide 72 text

No content

Slide 73

Slide 73 text

在社群 激戰 討論後, 更更新後的 RFC 已取消此策略略 請參參考: https://github.com/vuejs/rfcs/commit/6fe6f7be06dd5982be3c57e248fcd66cd55748e0

Slide 74

Slide 74 text

• 已知 2.x -> 3.x 不會有 Breaking Change,完全相容現有 API • 加強對 TypeScript ⽀支援 !== 只能⽤用 TypeScript • 更更多的是針對底層的改寫,對多數開發者來來說沒有明顯差距 • ⽬目前仍在 RFC 階段

Slide 75

Slide 75 text

No Breaking Changes! No Breaking Changes! No Breaking Changes!

Slide 76

Slide 76 text

⚠ 投資⼀一定有風險,嚐鮮前應詳閱公開說明書 ⚠

Slide 77

Slide 77 text

結語

Slide 78

Slide 78 text

如何選擇⼯工具 現在學這個是不是過時了了 我該等到最強的那個出現再開始學嗎

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

• 有效解決問題才是重點 • 框架、⼯工具都是因應問題⽽而⽣生,在不考慮場景的 情況下尋找解法就像是盲⼈人摸象 • ⼯工具的實作⽅方式不同,但理理念念卻很多類似 • 保持開放技術的多樣性是有益的,今天學的東⻄西 會成為明天的養分 • 優良的部分仍會保留留在其他地⽅方被實現

Slide 81

Slide 81 text

Thanks