Vue3.0で導入予定のFunction API試し書きしてみた
こんにちは、橋本です。
相変わらず毎日Vueでアプリを作る日々を送っております。
さて、少し前に話題になった、Vue3.0で導入予定のFunction API をご存知でしょうか??
Vue2.0で採用されているオブジェク トベースのもの(以下、Standard API)とは異なり、setupというコンポーネントオプションを介して、コンポーネントの機能(data, computed, methods, lifecycle, ...)を実装していくという仕組み(以下、Function API)となります。
詳しくはこちらをご覧ください。
github.com
ちなみにですが、Vue2.0で採用されているStandard APIはVue3.0でも引き続き利用可能とのことです。
Standard APIとFunction APIのどちらでも好きな方を使って実装していくことになると思います。
また、Function APIについては、まだ仕様策定段階のため、この記事に書かれている情報はあくまで記事執筆時(2019/08/08)のものとなります。
Vue3.0リリース時には全く別のものになっている可能性も無きにしもあらずなので、その辺はご理解の程よろしくお願いします。
そもそもVue3.0がリリースされてないのに、試してみたもヘッタクレも無いだろうとお思いの方も多いかと思うのですが、以下のプラグインを組み込むことで、Vue2.0でもFunction APIの機能を一部使用することが可能となっています。
今回はこのプラグインを使って、試し書きしていきたいと思います。
今回作成していくサンプルについては、以下のURLから実際に動いているものを触ることができます。
挙動を確認したい場合は是非。
http://demo.asial.co.jp/~akifumi-h/vue-function-api-sample/
セットアップ
まずはvue-cliを使ってプロジェクトを作っていきます。
vue create vue-function-api-sample
次にvue-function-apiプラグインを追加します。
npm install vue-function-api --save
or
yarn add vue-function-api
最後にmain.jsにプラグインを使用するために以下のコードを追加します。
import Vue from 'vue'
import { plugin } from 'vue-function-api'
Vue.use(plugin)
これで準備は整いました。早速やっていきましょう。
基本的な使い方
Function APIはsetupというコンポーネントオプションの中 で、用意されているいくつかの関数を使って、各機能のセットアップを行っていきます。
setupは第1引数にprops、第2引数にcontextを取る関数で、戻り値としてオブジェクトを返します。
戻り値のオブジェクトに含まれるプロパティ、メソッドがtemplateから参照可能となります。
templateで参照したい値が無い場合は、何も返さなくても大丈夫です。
ごちゃごちゃ説明するよりも実際のコードを見てもらったほうが手っ取り早いので、とりあえず簡単なカウンターのサンプルを作ってみました。
まずはVue2.0と同じ書き方である、Standard APIを使って書いたコードです。
<template>
<div class="value-sample">
<div class="count">現在のカウント: {{ count }}</div>
<button @click="decrement">減らす</button>
<button @click="increment">増やす</button>
</div>
</template>
<script>
import Vue from 'vue'
export default {
name: 'ValueSample',
data() {
return {
count: 0
}
},
methods: {
increment() {
this.count++
},
decrement() {
this.count--
}
}
}
</script>
これをFunction APIを使って書き直すとこのようになります。
<template>
<div class="value-sample">
<div class="count">現在のカウント: {{ count }}</div>
<button @click="decrement">