0Pricing
Vue Academy · レッスン

Composition APIのComputedとWatch

派生状態に使うcomputed()、副作用に使うwatch()とwatchEffect()について学習します。

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

状態から派生させ、変化に反応する

リアクティブな状態は、全体の半分にすぎません。そこから新しい値を派生させ、変化に反応する必要もあります。Composition APIには、そのためのcomputed、watch、watchEffectがあります。

派生値にはcomputedを使う

computed()はgetter関数を受け取り、他のリアクティブな状態から派生した値を持つrefを返します。JSでは.valueでアクセスし、テンプレートではアンラップされた状態で使えます。

import { ref, computed } from 'vue'

const count = ref(2)
const doubled = computed(() => count.value * 2)
console.log(doubled.value) // 4

computedは遅延評価とキャッシュを行う

computedは、リアクティブな依存関係のいずれかが変化したときにだけ再計算されます。変更がないまま10回読み取った場合、getterは1回だけ実行され、キャッシュされた結果が再利用されます。

そのため、計算コストの高い派生値にcomputedは適しています。

computedは自動的に更新される

依存関係を変更すると、computedは次に読み取られるときに更新されます。手動で呼び出す必要はありません。

const count = ref(2)
const doubled = computed(() => count.value * 2)
count.value = 5
console.log(doubled.value) // 10

副作用にはwatchを使う

watch()はリアクティブなソースを監視し、変化したときにコールバックを実行します。コールバックは新しい値と古い値を受け取ります。

import { ref, watch } from 'vue'

const count = ref(0)
watch(count, (newVal, oldVal) => {
  console.log('changed from', oldVal, 'to', newVal)
})

watchはデフォルトでは遅延実行される

computedとは異なり、watchはコールバックをすぐには実行しません。最初の変化を待ってから実行します。ロギング、データの取得、ストレージへの保存などの副作用に使います。

複数のソースを監視する

ソースの配列を渡すと、複数の値を一度に監視できます。コールバックは新しい値と古い値の配列を受け取ります。

watch([count, name], ([newCount, newName], [oldCount, oldName]) => {
  console.log(newCount, newName)
})

getterを監視する

リアクティブなオブジェクトのプロパティを監視するには、getter関数を渡します。オブジェクトを直接監視すると深い変更でのみ実行されるため、意外な動作になることがあります。

const state = reactive({ count: 0 })
watch(() => state.count, (newVal) => {
  console.log('count is', newVal)
})

watchEffect:即時実行と自動追跡

watchEffect()は関数をすぐに実行し、その中で使用されているリアクティブな値が変化するたびに再実行します。依存関係を列挙する必要はありません。自動的に追跡されます。

import { ref, watchEffect } from 'vue'

const count = ref(0)
watchEffect(() => {
  console.log('count is', count.value)
})
// logs immediately, then on every change

watchとwatchEffectの比較

  • watch:ソースを明示し、遅延実行され、古い値と新しい値を取得できます。
  • watchEffect:依存関係を自動追跡し、即時実行されます。古い値にはアクセスできません。

以前の値が必要な場合や、動作を細かく制御したい場合はwatchを使います。手軽なリアクティブな副作用にはwatchEffectを使います。

computed と watch の違い

computedは、新しい派生値が必要な場合に使用します。変更に応じて処理を実行する場合は、watchまたはwatchEffectを使用します。値を再計算するためにwatchを使わないでください。その用途にはcomputedがあります。

クイックチェック

適切なリアクティブヘルパーを選択してください。

まとめ

値の派生と変更への反応方法を学びました。

  • computedは、遅延評価されキャッシュされる派生値を作成します。
  • watchは特定のソースの変更に反応し、新旧の値を提供します。遅延評価されます。
  • watchEffectはすぐに実行され、依存関係を自動的に追跡します。
  • 値にはcomputed、副作用にはwatch/watchEffectを使用します。

よくある質問

「Composition APIのComputedとWatch」レッスンは無料ですか?

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

「Composition APIのComputedとWatch」で何を学びますか?

派生状態に使うcomputed()、副作用に使うwatch()とwatchEffect()について学習します。 ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Composition APIのComputedとWatch」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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