iCARE Dev Meetup #19 https://icare.connpass.com/event/204553/ https://www.youtube.com/watch?v=2D_dXnaP6yI
Pros and Cons で考えるVue 2 Composition API@mascii_kiCARE Dev Meetup #19
View Slide
自己紹介小柳 昌生 (Masaki Koyanagi)株式会社ビザスクフロントエンドエンジニアTwitter: @mascii_k
Pros and Cons definition and meaning● Pros: 長所、メリット● Cons: 短所、デメリット
お話しすることVue 2 Composition API の導入メリットや注意点を他の何かと比較することで考察する1) Options API2) Vue 3 Composition API3) React HooksVue 2Composition API
mountedcreatedmethodscomputeddatachvs. Options API
Pros型注釈の記述を強いられない● computed プロパティ内のメソッドに戻り値の型注釈が必要なことが多い● setup 関数内ではcomputed() の型推論がうまくいく参照: https://jp.vuejs.org/v2/guide/typescript.html
Prosロジックの再利用性が高い● mixins (Options API)○ オブジェクトがどのようにマージされるか予想しにくい● use 関数 (composable functions)○ ロジックを変更するためのパラメータを渡せる○ 型推論できる、テストしやすくなった○ VueUse のような Composition API を活用したユーティリティライブラリも存在する
Prosprovide() / inject() の使い勝手が良い● inject する側でも型を同期して使えるようになった● Vuex に頼らずにストアを構成することもできる● 使い勝手が良すぎるので、濫用には注意○ Props とカスタムイベントの利用で十分なことも多い
ConsRef のアンラップを知る必要がある● ref(), computed() の戻り値は Ref 型!● computed() は極力テンプレートのために使う● ref() よりも reactive() を使った方が良いと思う
Consプラグインがまだ RC 版● なかなか正式リリースされない…!○ これが原因で導入をためらっている方が多い?○ Vue 3.0 が正式リリース (2020/09) されたタイミングで、API が根底から変わる可能性は小さくなったけしからん!
vs. Vue 3 Composition API
ProsIE11 に対応できる● リアクティブの仕組みが異なる○ Vue 2 は ES6 Proxy を利用していない○ Vue 3 は ES6 Proxy を利用している■ IE11 互換ビルドは提供されない可能性がある(Evan You, Vuejs Amsterdam 2021)詳細は Vue 2 / 3 ドキュメントの「リアクティブの探求」を参照https://www.youtube.com/watch?v=El8Jw2CFj7g&t=2221s
ConsVue 3 に比べると変更検知が弱い実は Composition API の差異よりリアクティブの差異の方が大きい!Vue 2 の「リアクティブの探求」
ConsSuspense に対応していない● Vue 3 では、子コンポーネントのasync setup() が return するまで親コンポーネント側でローディング表示ができる が提供されている○ Vue 3.0 でも実験的機能とされている○ Vue 3.1 で正式リリース?
eReduceruseCallbackuseEffectuseStatextuseMemovs. React Hooks
Pros従来記法との差異が小さい● クラスコンポーネント ↔ 関数コンポーネント(+ Hooks)○ パフォーマンスや無限ループに注意が必要になる○ 従来記法を知っていても Hooks は使えないdata ↔ reactive()computed ↔ computed()methods ↔ setup で関数を定義created ↔ setup で実行mounted ↔ onMounted()watch ↔ watch()● Options API ↔ Composition API○ 従来記法との対応関係がわかりやすい
Cons従来記法を引き続き知る必要がある● 関数コンポーネントだけにしていく流れ● Options / Composition API が併存していく流れ○ ひとつの vue ファイル内で併記することができ、その場合は最初に setup が実行される■ 型推論がうまくいかないため NG○ vue ファイル毎にどちらか一方を使うのは問題ない■ 無理にマイグレーションする必要ないと思う
まとめ
最新 だからではなく、Pros and Cons で考えていきましょうまとめ● Vue 2 / 3 は Composition API よりも、リアクティブに大きな差異がある● Options API / Composition API の差異よりも、リアクティブの特性に詳しくなると良い