スマレジエンジニアyushiのブログ

スマレジエンジニアのブログ

Vue3 Composition APIの勉強

先日Vue3が公開になりました。

 

yushi-dev.hatenablog.com

 

今回はVue3の目玉機能の一つ、Composition APIを触ってみます。

 

Composition APIとは

 

公式ドキュメントはこの辺りです。

 

vue-composition-api-rfc.netlify.app

 

v3.vuejs.org

 

Composition APIを利用する主なメリットは、ロジックをComponentから切り出し、個別に管理したり複数のComponentで共有できることです。

https://vue-composition-api-rfc.netlify.app/#motivation 

これはまさに欲しかった機能...。Vue2でやるならmixinかと思いますが、Composition APIは完全にモジュールとして切りだせる感じで、結合が疎に感じます。

 

Vue2バージョンも製作されていますが、こちらはまだBetaです。

github.com

 

試してみる

 

公式の一番簡単な例は、こちらかと思います。

 

これを元に、プラスαで実装したものがこちらです。

 

dockerやMakefileの環境は、下記の記事で紹介した通りです。

yushi-dev.hatenablog.com

 

今回は、プロジェクト作成にViteを使っています。

 

Viteは、開発時はbundleしないから速いそうな...?

確かに、かなり速いような気がしますが...。もう少し触ってみたいと思います。現在RC(リリース候補版)です。

github.com

 

f:id:yushi0:20201116003606p:plain

画面はこんな感じです。ロゴや「Hello Vue 3.0 + Vite」、「Edit ~」の箇所はViteが生成したまんまです。

「Count is ... 」のボタンをクリックすると、Count is が1ずつ増え、double is はその倍になります。「add」のボタンで、好きな数値を足し引きできます。

 

https://github.com/nek0meshi/vue3-learn/blob/master/hello-vue3/src/utils/counter.js

stateの中にcountと、doubleを持っています。reactiveで囲っているので、.vueファイルのscriptタグ内で書いた時と同様に、reactiveに動作してくれます(値が更新されたら、画面などに反映される)。

countを操作するための、increment、addというメソッドを定義しています。

この3点をObjectとして返却するメソッドを、export defaultしています。

 

https://github.com/nek0meshi/vue3-learn/blob/master/hello-vue3/src/components/HelloWorld.vue

counter.jsをこのHelloWorld.vueでimportしています。

Composition APIでは、setup内で諸々を定義しreturnすると、Component内で呼び出せるようです。

今回は、counter.jsからimportしたメソッドの返り値を、setupの返り値としています。

その結果、templateタグ内でstate、add、incrementが使えるようになっています。

 

まとめ

  • Vue3のComposition APIによって、Vueのロジックをreactiveに別モジュールにきりだせるようになった
  • ごく簡単に、動作確認してみた(https://github.com/nek0meshi/vue3-learn