1 watch est exécuté paresseusement, mais watchEffect ne l'est pas. Quelle que soit la configuration du troisième paramètre de watch, watch est exécuté. pour la première fois dans le composant. Il ne sera pas exécuté lorsque le programme est exécuté, il ne sera exécuté que lorsque les dépendances changeront ultérieurement, et watchEffect sera exécuté immédiatement lorsque le programme sera exécuté ici, puis exécuté en réponse à sa dépendance. changements.
2. Les deux sont utilisés de différentes manières. watch passe généralement deux paramètres. Le premier paramètre indique quel état doit déclencher la réexécution de l'écouteur, et le deuxième paramètre définit la fonction de rappel de l'écouteur. la fonction de rappel peut également accepter deux paramètres, pointant vers les valeurs avant et après le changement d'état, afin que nous puissions voir les changements avant et après l'état, mais ne pouvons pas le voir dans watchEffect, et elle ne peut pas être utilisée dans le premier paramètre comme watch Définir les dépendances plus spécifiquement.
3. Watch ne peut surveiller que les valeurs définies par les données réactives et la référence. Pour surveiller une seule valeur, vous devez transmettre la fonction getter de la valeur correspondante, et watchEffect ne peut pas surveiller les valeurs. défini par reactive et ref. , ne peut surveiller que sa valeur spécifique correspondante (cela semble un peu alambiqué, voir le code ci-dessous).
watch :
1. :
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 }; }
Lorsque l'événement clickEvent est déclenché pour modifier la valeur de state.count, nous pouvons voir les résultats suivants depuis la console, indiquant que watch a répondu à state.count change, mais n'a pas été exécuté initialement.
watchEffect :
setup() { const state = reactive({ count: 0, attr: { name: "" } }); watchEffect(() => { console.log("watchEffect 执行了"); console.log(state); }); const clickEvent = () => { state.count++; }; return { clickEvent }; }
Cliquez plusieurs fois sur le bouton pour déclencher l'événement clickEvent. Le résultat de la console est le suivant, indiquant. que watchEffect est le premier composant. Le rappel est exécuté lors de la première exécution, mais ne répondra plus aux changements de state.count par la suite.
Explication watch peut surveiller la valeur définie par reactive, mais watchEffect ne le peut pas.
2. Laissez watch et watchEffect surveiller la valeur définie par la réf.
watch:
setup(){ const count = ref(0); watch(count, (post, pre) => { console.log("watch 执行了"); console.log(post); console.log(pre); }); const clickEvent = () => { count.value++; }; return { clickEvent }; }
Résultat:
watchEffect:
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 }; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!