0Pricing
Vue Academy · レッスン

setup()関数とリアクティブな変数

setup()のエントリーポイント、プリミティブに使うref()、オブジェクトに使うreactive()、値の返却について学習します。

「setup()関数とリアクティブな変数」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全4レッスンが含まれています。

setup()のエントリーポイント

Composition APIは、setup()という特別なコンポーネントオプションの中で使用します。これはコンポーネントが作成される前に一度実行され、リアクティブな状態や関数を宣言する場所です。

setup()からreturnしたものは、テンプレートで利用できるようになります。

refでリアクティブな状態を作成する

ref()は、単一の値(数値、文字列、真偽値、さらにはオブジェクト)をリアクティブなコンテナでラップします。実際の値は.valueプロパティに格納されます。

import { ref } from 'vue'

export default {
  setup() {
    const count = ref(0)
    console.log(count.value) // 0
    return { count }
  }
}

reactiveでリアクティブなオブジェクトを作成する

reactive()は通常のオブジェクトを受け取り、深くリアクティブなプロキシを返します。プロパティには直接アクセスでき、.valueは必要ありません。

import { reactive } from 'vue'

export default {
  setup() {
    const user = reactive({ name: 'Alice', age: 30 })
    console.log(user.name) // Alice
    return { user }
  }
}

状態をテンプレートに返す

setup()からオブジェクトとして返したものはすべて、テンプレートのバインディングになります。ここではcountとuserの両方が公開されています。

export default {
  setup() {
    const count = ref(0)
    const user = reactive({ name: 'Alice' })
    return { count, user }
  }
}

テンプレートでの自動アンラップ

JavaScriptではcount.valueと記述しましたが、テンプレートではcountとだけ記述します。Vueがトップレベルのrefを自動的にアンラップするため、テンプレートで.valueと入力する必要はありません。

<!-- template -->
<p>Count: {{ count }}</p>
<p>Name: {{ user.name }}</p>

関数を追加する

setup()で定義した関数は、リアクティブな状態を読み取ったり変更したりできます。JavaScriptの中では、refに対して引き続き.valueを使うことを忘れないでください。

import { ref } from 'vue'

export default {
  setup() {
    const count = ref(0)
    function increment() { count.value++ }
    return { count, increment }
  }
}

テンプレートで接続する

関数を返し、イベントにバインドします。ボタンをクリックするとincrementが呼び出されてrefが変更され、Vueが再レンダリングします。

<!-- template -->
<button @click="increment">Count is {{ count }}</button>

thisキーワードは不要

setup()の中にthisはありません。宣言した変数を直接操作します。そのため、コードの動作を理解しやすく、TypeScriptとの相性も良くなります。

setup()でthisを使おうとしても、コンポーネントインスタンスは取得できません。

setupは作成前に実行される

setup()は非常に早い段階、つまりcreatedより前、そしてコンポーネントインスタンスの準備が完全に整う前に実行されます。そのためthisは利用できず、ここではまだDOMにもアクセスできません。

setupの引数:propsとcontext

setup(props, context)は、解決済みのpropsを第1引数として、contextオブジェクトを第2引数として受け取ります。contextにはattrs、slots、emit、exposeが用意されています。

export default {
  props: { title: String },
  setup(props, context) {
    console.log(props.title)
    context.emit('ready')
  }
}

完全なミニコンポーネント

ここまでの内容をすべてまとめた例です。ref、リアクティブなオブジェクト、関数、そして返されるバインディングが含まれています。

import { ref, reactive } from 'vue'

export default {
  setup() {
    const count = ref(0)
    const user = reactive({ name: 'Alice' })
    function increment() { count.value++ }
    return { count, user, increment }
  }
}

理解度チェック

setup()とリアクティブ変数を理解できているか確認しましょう。

まとめ

Composition APIの基礎として、次のことを学びました。

  • setup()は作成前に一度実行され、テンプレートのバインディングを返します。
  • ref()は値をラップします。JSでは.valueを使います。
  • reactive()はオブジェクトをラップします。プロパティには直接アクセスします。
  • テンプレートではrefが自動的にアンラップされるため、.valueを省略できます。
  • setup()の中にthisはありません。

よくある質問

「setup()関数とリアクティブな変数」レッスンは無料ですか?

はい。「setup()関数とリアクティブな変数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全4レッスンが含まれています。

「setup()関数とリアクティブな変数」で何を学びますか?

setup()のエントリーポイント、プリミティブに使うref()、オブジェクトに使うreactive()、値の返却について学習します。 ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Vue Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「setup()関数とリアクティブな変数」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このVue Academyレッスンでコードを書いて実行できますか?

はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Composition APIを使う理由
  2. setup()関数とリアクティブな変数
  3. refとreactive:使い分け
  4. Composition APIのComputedとWatch
← Vue Academyに戻る