Vue3 watch プロパティ
Vue3 では、watchプロパティは、Vue インスタンス内の特定のデータの変化を監視し、データが変化したときに対応するコールバック関数を実行するために使用されます。
watchVue インスタンス内の特定のデータの変化を監視して応答し、DOM の更新やネットワークリクエストの送信などの副作用操作を実行できるようにします。
2. watch プロパティの基本用法
Vue3 では、watchプロパティは次の方法で使用できます:
実例
import { ref, watch } from 'vue';
export default {
setup() {
const count = ref(0);
watch(count, (newValue, oldValue) => {
console.log(`count は $ から{oldValue}$ に変わりました{newValue}`);
});
return {
count
};
}
};
export default {
setup() {
const count = ref(0);
watch(count, (newValue, oldValue) => {
console.log(`count は $ から{oldValue}$ に変わりました{newValue}`);
});
return {
count
};
}
};
3. コードの説明
上記のコードでは:
- まず、私たちは
refを使用して、リアクティブデータを作成しましたcount、その初期値を 0 に設定しました。 - 次に、私たちは
watch関数を使用してcountの変化を監視します。watch2つの引数を受け取ります:- 最初の引数は、監視したいデータです(ここでは
count)。 - 2番目の引数はコールバック関数で、監視しているデータが変化すると、このコールバック関数が呼び出されます。コールバック関数は2つの引数を受け取ります:
newValue:データ変化後の新しい値。oldValue:データ変化前の古い値。
- 最初の引数は、監視したいデータです(ここでは
4. watch プロパティの高度な使い方
単一のデータを監視するだけでなく、watch複数のデータや複雑な式を監視することもできます。
4.1 複数のデータを監視する
実例
import { ref, watch } from 'vue';
export default {
setup() {
const firstName = ref('John');
const lastName = ref('Doe');
watch([firstName, lastName], ([newFirstName, newLastName], [oldFirstName, oldLastName]) => {
console.log(`firstName は $ から{oldFirstName}$ に変わりました{newFirstName}`);
console.log(`lastName は $ から{oldLastName}$ に変わりました{newLastName}`);
});
return {
firstName,
lastName
};
}
};
export default {
setup() {
const firstName = ref('John');
const lastName = ref('Doe');
watch([firstName, lastName], ([newFirstName, newLastName], [oldFirstName, oldLastName]) => {
console.log(`firstName は $ から{oldFirstName}$ に変わりました{newFirstName}`);
console.log(`lastName は $ から{oldLastName}$ に変わりました{newLastName}`);
});
return {
firstName,
lastName
};
}
};
この例では、私たちが監視したのはfirstNameとlastName2つのデータの変化です。
4.2 複雑な式を監視する
実例
import { ref, watch } from 'vue';
export default {
setup() {
const user = ref({
name: 'Alice',
age: 25
});
watch(
() => user.value.age, // user.age の変化を監視する
(newAge, oldAge) => {
console.log(`age は $ から{oldAge}$ に変わりました{newAge}`);
}
);
return {
user
};
}
};
export default {
setup() {
const user = ref({
name: 'Alice',
age: 25
});
watch(
() => user.value.age, // user.age の変化を監視する
(newAge, oldAge) => {
console.log(`age は $ から{oldAge}$ に変わりました{newAge}`);
}
);
return {
user
};
}
};
この例では、私たちは関数を使用してuser.ageの変化を監視しています。
5. watch プロパティのオプション
watch関数はさらに第3引数を受け取ります。これはオプションの設定オブジェクトで、監視の動作をカスタマイズするために使用できます。
実例
import { ref, watch } from 'vue';
export default {
setup() {
const count = ref(0);
watch(count, (newValue, oldValue) => {
console.log(`count は $ から{oldValue}$ に変わりました{newValue}`);
}, {
immediate: true, // コールバック関数を即時実行する
deep: true // ディープウォッチ。オブジェクトまたは配列の監視に適しています。
});
return {
count
};
}
};
export default {
setup() {
const count = ref(0);
watch(count, (newValue, oldValue) => {
console.log(`count は $ から{oldValue}$ に変わりました{newValue}`);
}, {
immediate: true, // コールバック関数を即時実行する
deep: true // ディープウォッチ。オブジェクトまたは配列の監視に適しています。
});
return {
count
};
}
};
immediate: true:監視開始時にコールバック関数をすぐに実行することを示します。データが変化するのを待つのではなく、即座に実行します。deep: true:ディープウォッチを表します。オブジェクトや配列の変化を監視する場合に適しています。
その他の拡張
Vue3 オプションAPI