ホームページ > 記事 > ウェブフロントエンド > vue3でwatchを使用する方法
watch(WatcherSource, Callback, [WatchOptions])WatchOptions のパラメータ設定:Parameters:
WatcherSource: Want to応答データを監視します。
Callback: 実行されるコールバック関数、入力パラメータ (newValue、oldValue)。
[WatchOptions]: deep、immediate、および flash はオプションです。
deep: オブジェクトなどの参照型データを深く監視する必要がある場合は deep: true を設定し、デフォルト値は間違い。1. 単一のデータ参照immediate: デフォルトでは、watch は遅延ですimmediate: true が設定されている場合、watch は初期化中にただちにコールバック関数を 1 回実行します。
flush: コールバック関数の実行タイミングを制御します。事前、事後、または同期に設定できます。
Pre: デフォルト値 監視値が変化すると、コールバック関数が最初に実行されます (DOM が更新される前に実行されます)。
後: DOM の更新とレンダリングが完了したら、コールバック関数を実行します。
sync: 監視対象の値が変更されると、コールバック関数が同期的に実行されます (慎重に使用することをお勧めします)。
const count = ref(1); watch(count, (newValue, oldValue) => { console.log('值发生了变更', newValue, oldValue); });
const count = ref({ a: 1, b: 2 }); const handleClick = function () { count.value.a = 5; }; watch(count, (newValue, oldValue) => { console.log('值发生了变更', newValue, oldValue); });
const count = ref({ a: 1, b: 2 }); const handleClick = function () { count.value.a = 5; }; watch( count, (newValue, oldValue) => { console.log('值发生了变更', newValue, oldValue); }, { deep: true } );
値が変更されました Proxy { a: 5, b: 2} プロキシ {a: 5, b: 2}詳細なモニタリングの必要性は、属性ではなく参照データ型そのものであることに注意してください。初期化 。さらに、新しい値のみを取得できますが、古い値は取得できません。
2, 参照型 ref ディープコピー ディープモニタリング
const count = ref({ a: 1, b: 2 }); const handleClick = function () { count.value.a = 5; }; watch( () => { return { ...count.value }; }, (newValue, oldValue) => { console.log('值发生了变更', newValue, oldValue); }, { deep: true } );
3、単一データを監視します: reactive
const single = reactive({ count: 1, test: 2 }); const handleClick = function () { single.count++; }; watch( () => single.count, (newValue, oldValue) => { console.log('值发生了变更', newValue, oldValue); }, { immediate: true } );
4 番目に、参照型データ: reactive
<template> <div class="mine-box"> <div ref="countDom">{{ single.count }}</div> <button @click="handleClick">按钮</button> </div> </template> <script setup> import { ref, reactive, watch } from 'vue'; const single = reactive({ count: 1, test: { a: 1, b: 2 } }); const handleClick = function () { single.test.a++; }; watch( single, (newValue, oldValue) => { console.log('值发生了变更', newValue, oldValue); }, { immediate: true } ); </script>
No.3との違いは、この場合は新しい値しか取得できないことです。
5, immediate: true
immediate: true にすると、watch は初期化中にすぐにコールバックを実行します。 。
const count = ref(1);
const handleClick = function () {
count.value++;
};
watch(
count,
(newValue, oldValue) => {
console.log('值发生了变更', newValue, oldValue);
},
{ deep: true, immediate: true }
);
6、複数のデータソースを監視します
const count = ref(1); const double = ref(2); const handleClick = function () { count.value++; double.value++; }; watch( [count, double], (newValue, oldValue) => { console.log('值发生了变更', newValue, oldValue); }, { deep: true, immediate: true } );
データの 1 つのセルを変更するときにコールバックをトリガーしたい場合は、2 つのデータ変更の間に nextTick を追加できます。
7、フラッシュ構成
次にコードを見てみましょう:
<template> <div class="mine-box"> <div ref="countDom">{{ count }}</div> <button @click="handleClick">按钮</button> </div> </template> <script setup> import { ref, watch } from 'vue'; const count = ref(1); const countDom = ref(null); const handleClick = function () { count.value++; }; watch( count, (newValue, oldValue) => { console.log('---', countDom.value.textContent); console.log('值发生了变更', newValue, oldValue); }, { deep: true } ); </script>
得られた結果:
--- 1 つの値が変更されました 2 12, フラッシュ: 'post' dom レンダリングが完了した後、コールバック関数コールバック関数では、新しい値は 2 になりましたが、取得された DOM は以前のもののままです。デフォルトでは、フラッシュ値は pre です。値が変更されると、DOM が更新される前にコールバック関数がトリガーされます。
<template> <div class="mine-box"> <div ref="countDom">{{ count }}</div> <button @click="handleClick">按钮</button> </div> </template> <script setup> import { ref, watch } from 'vue'; const count = ref(1); const countDom = ref(null); const handleClick = function () { count.value++; }; watch( count, (newValue, oldValue) => { console.log('---', countDom.value.textContent); console.log('值发生了变更', newValue, oldValue); }, { deep: true, flush: 'post' } ); </script>を実行します。得られた結果:
--- 2 の値があります。 Changed 2 1
コールバック関数を呼び出すとDOMが更新されており、このとき取得されるDOMはデータ変更後の更新後のDOMとなります。
以上がvue3でwatchを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。