1. watch は遅延実行されますが、watchEffect は実行されません。watch の 3 番目のパラメータの設定に関係なく、watch はコンポーネントが最初に実行されるときに実行されます。実行されません。後で依存関係が変更されたときにのみ実行されます。WatchEffect は、ここでプログラムが実行されるとすぐに実行され、依存関係の変更に応じて実行されます。
2. この 2 つは、異なる方法で使用されます。通常、Watch は 2 つのパラメータを渡します。最初のパラメータは、リスナーの再実行をトリガーする状態を示します。2 番目のパラメータは、リスナーのコールバック関数を定義します。そして、コールバック関数は次のことができます。また、状態の変化の前後の値を指す 2 つのパラメーターも受け入れます。これにより、状態の前後の変化を確認できますが、watchEffect ではそれを見ることができず、最初のパラメーターを次のようにより具体的にすることはできません。依存関係を定義します。
3. Watch は reactive data と ref で定義された値のみを監視できます。単一の値を監視したい場合は、対応する値の getter 関数を渡す必要があります。ただし、watchEffect は、 reactive と ref で定義された値を監視できます。reactive と ref で定義された値のみを監視できます。対応する特定の値を監視できます (少し複雑に感じます。以下のコードを参照してください)。
watch:
1. watch と watchEffect で reactive で定義された値を監視します:
watch:
setup() { const state = reactive({ count: 0, attr: { name: "" } }); watch(state, (post, pre) => { console.log(post); console.log(pre); console.log("watch 执行了"); }); const clickEvent = () => { state.count++; }; return { clickEvent }; }
clickEvent イベントがトリガーされて state.count の値が変更されると、コンソールから次の結果が表示されます。これは、watch が state.count の変更に応答したが、応答しなかったことを示しています。最初はそうせずに実装してください。
watchEffect:
setup() { const state = reactive({ count: 0, attr: { name: "" } }); watchEffect(() => { console.log("watchEffect 执行了"); console.log(state); }); const clickEvent = () => { state.count++; }; return { clickEvent }; }
ボタンを複数回クリックして clickEvent イベントをトリガーします。コンソールの結果は次のようになります。これは、watchEffect がコールバックを実行したときに、watchEffect がコールバックを実行したことを示しています。コンポーネントが初めて実行されました。その後、state.count の変更に応答しなくなります。
#説明 watch は reactive で定義された値を監視できますが、watchEffect は監視できません。
2. watch と watchEffect で ref で定義された値を監視します。
#時計:setup(){ const count = ref(0); watch(count, (post, pre) => { console.log("watch 执行了"); console.log(post); console.log(pre); }); const clickEvent = () => { count.value++; }; return { clickEvent }; }
setup(){ const count = ref(0); watchEffect(() => { console.log("watchEffect 执行了"); console.log(count); }); const clickEvent = () => { count.value++; }; return { clickEvent }; }
setup(){ const state = reactive({ count: 0 }); watch(state.count, (post, pre) => { console.log("watch 执行了"); console.log(post); console.log(pre); }); const clickEvent = () => { state.count++; }; return { clickEvent }; }
setup(){ const state = reactive({ count: 0 }); watchEffect(() => { console.log("watchEffect 执行了"); console.log(state.count); }); const clickEvent = () => { state.count++; }; return { clickEvent }; }
setup(){ const state = reactive({ count: 0 }); watch( () => state.count, (post, pre) => { console.log("watch 执行了"); console.log(post); console.log(pre); } ); const clickEvent = () => { state.count++; }; return { clickEvent }; }
setup(){ const state = reactive({ count: 0 }); //不会响应变化 watch( () => state, (post, pre) => { console.log("watch 执行了"); console.log(post); console.log(pre); } ); const clickEvent = () => { state.count++; }; return { clickEvent }; }
setup(){ const state = reactive({ count: 0 }); //加上了 {deep:true} 可以响应变化 watch( () => state, (post, pre) => { console.log("watch 执行了"); console.log(post); console.log(pre); }, {deep:true} ); const clickEvent = () => { state.count++; }; return { clickEvent }; }
setup(){ const state = reactive({ count: 0 }); const numbers = reactive([0, 1, 2, 3]); watch( () => [...numbers], (post, pre) => { console.log("watch 执行了"); console.log(post); console.log(pre); } ); const clickEvent = () => { numbers.push(1); }; return { clickEvent }; }
以上がvue3でwatchとwatchEffectを使う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。