Vue Academy · レッスン

Watcherと深いリアクティビティ

watcherとディープウォッチングでデータの変更に反応します

レッスン 3/313 ステップ

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

watcherとは

ウォッチャーは、データの変更に応じて関数を実行します。

  • computedとは異なり、副作用のために使用します
  • データの取得、ログ記録、ストレージへの保存などに使用します
  • 特定の値が変化したときに処理を実行します

watch関数

watch関数は、監視する対象と、新しい値および古い値を受け取るコールバックを引数に取ります。

import { ref, watch } from "vue"

const query = ref("")

watch(query, (newVal, oldVal) => {
  console.log("changed from", oldVal, "to", newVal)
})

実践例

検索入力を監視し、値が変化したときにAPIを呼び出します。

const search = ref("")

watch(search, async (newQuery) => {
  const results = await fetchResults(newQuery)
  items.value = results
})

immediateオプション

デフォルトでは、ウォッチャーは変更があったときだけ実行されます。immediateオプションを指定すると、最初にも一度すぐに実行されます。

watch(userId, (id) => {
  loadUser(id)
}, { immediate: true })

// Runs immediately with the current value,
// then again on every change

deepオプション

デフォルトでは、オブジェクトの監視は参照の変更でのみ実行されます。deepオプションを指定すると、ネストされたプロパティも監視します。

const profile = reactive({ name: "Ada", address: { city: "London" } })

watch(profile, (val) => {
  console.log("profile changed")
}, { deep: true })

// Fires even when profile.address.city changes

ネストされたオブジェクトの監視

deepを指定しない場合、監視対象のリアクティブなオブジェクトでネストされたプロパティを変更しても、コールバックが期待どおりに実行されないことがあります。deepを指定すると実行されますが、より多くの処理が必要になります。

  • ネストされた値の追跡が本当に必要な場合にのみdeepを使用します
  • 大きなオブジェクトをdeepで監視すると、処理コストが高くなることがあります

getterの監視

特定のネストされた値を監視するには、監視対象としてgetter関数を渡します。

watch(
  () => profile.address.city,
  (newCity) => {
    console.log("city is now", newCity)
  }
)

複数の値の監視

複数の値を一度に監視するには、監視対象を配列で渡します。

watch([width, height], ([newW, newH], [oldW, oldH]) => {
  console.log("size:", newW, "x", newH)
})

watchEffect

watchEffectはすぐに実行され、その中で読み取ったリアクティブな値が変化するたびに再実行されます。監視対象を明示的に列挙する必要はありません。

import { watchEffect } from "vue"

watchEffect(() => {
  console.log("count is", count.value)
})

// Runs now, and again whenever count changes

watchとwatchEffectの比較

次のように使い分けます。

  • watchは監視対象を明示的に指定し、新旧両方の値を受け取り、デフォルトでは遅延実行されます
  • watchEffectは依存関係を自動的に追跡し、すぐに実行されます。古い値は受け取りません

以前の値が必要な場合や細かく制御したい場合はwatchを使用し、手軽さを重視する場合はwatchEffectを使用します。

Options APIでのウォッチャー

Options APIでは、データ名をキーにしたwatchブロックでウォッチャーを宣言します。

export default {
  data() {
    return { question: "" }
  },
  watch: {
    question(newVal, oldVal) {
      this.getAnswer(newVal)
    }
  }
}

理解度チェック

ウォッチャーについての理解度を確認します。

まとめ: ウォッチャーと深いリアクティビティ

副作用を使って変更に反応する方法を学びました。

  • watchは対象を監視し、新しい値と古い値を渡します
  • immediateは開始時に一度実行します
  • deepはネストされたオブジェクトの変更を追跡します
  • watchEffectは依存関係を自動的に追跡し、すぐに実行されます
  • 配列を使って複数の対象を監視できます

次はVue Routerを使ったルーティングです。

無料で開始

AI チューターと学ぶ HTML — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
42
レッスン
156

よくある質問

「Watcherと深いリアクティビティ」レッスンは無料ですか?

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

「Watcherと深いリアクティビティ」で何を学びますか?

watcherとディープウォッチングでデータの変更に反応します ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Watcherと深いリアクティビティ」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. リアクティビティの基礎
  2. 算出プロパティ
  3. Watcherと深いリアクティビティ
← Vue Academyに戻る