【Vue.js】watchを活用してデータの変化を監視する方法

Vue.jsでは、アプリケーションの状態やデータの変化に応じて動作を制御することが求められる場面が多々あります。そんな時に便利なのが、Vue.jsのwatchオプションです。本記事では、watchの基本的な使い方から応用的な使い方までを解説します。

watchとは?

watchはVue.jsで特定のデータプロパティが変更されたときに呼び出される関数を定義できるオプションです。これを活用することで、特定のデータの変化に対して任意の処理を行うことが可能になります。

基本的なwatchの使用例

以下は、watchの基本的な使用例です。この例では、messageというデータプロパティが変更されるたびに、その長さを別のプロパティlengthに反映させています。

new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue.js!',
    length: 0
  },
  watch: {
    message(newVal, oldVal) {
      this.length = newVal.length;
    }
  }
});
  • message: 監視対象となるデータプロパティです。このプロパティが変更されると、watchで定義した関数が呼び出されます。
  • newVal: 変更後の新しい値を表します。
  • oldVal: 変更前の古い値を表します。
  • this.length = newVal.length;: messageの長さをlengthプロパティに設定しています。

深い監視 (deepオプション)

オブジェクトや配列の内部プロパティの変更を監視したい場合には、deep: trueを設定する必要があります。以下に例を示します。

new Vue({
  el: '#app',
  data: {
    user: {
      name: 'Alice',
      age: 25
    }
  },
  watch: {
    user: {
      handler(newVal, oldVal) {
        console.log('User data changed:', newVal);
      },
      deep: true
    }
  }
});

この例では、userオブジェクトの内部プロパティが変更された際にもwatchが反応します。通常のwatchではオブジェクトの直接的な変更のみが監視されますが、deepオプションを使用することで、ネストされたプロパティの変更も検知可能です。

即時実行 (immediateオプション)

watch関数を監視開始時に即座に実行したい場合には、immediate: trueを設定します。例えば、以下のようなケースです。

new Vue({
  el: '#app',
  data: {
    query: ''
  },
  watch: {
    query: {
      handler(newVal) {
        console.log('Query changed:', newVal);
      },
      immediate: true
    }
  }
});

immediateオプションを使用することで、コンポーネントがマウントされた直後にwatch関数が実行されます。これにより、データの初期値に基づいて初期化処理を行うことができます。

まとめ

Vue.jsのwatchオプションは、データの変化に対して特定の処理を実行するための強力なツールです。基本的な使い方から、深い監視や即時実行といったオプションまで、watchを効果的に活用することで、より柔軟で反応的なアプリケーションを構築することができます。watchを適切に使いこなして、Vue.jsでの開発をさらにスムーズに進めましょう。