【Vue3】回顾watch,学习watchEffect

简介: 【Vue3】回顾watch,学习watchEffect

🍋回顾watch

在介绍本节的内容之前,我们还是先准备好本节使用的初始代码

<template>
  <div class="person">
    <h2>攻击:{{ gongji }}</h2>
    <h2>防御:{{ fangyu }}</h2>
    <button @click="changeG">攻击点数加一</button>
    <button @click="changeF">防御点数加一</button>
</div>
 </template>
 
 <script lang="ts" setup name="Person11">
    import {ref} from 'vue'
    let gongji = ref(0)
    let fangyu = ref(0)
    function changeG(){
      gongji.value += 1
    }
    function changeF(){
      fangyu.value += 1
    }
   
 </script>
 
 <style scoped>
   .person {
     background-color: skyblue;
     box-shadow: 0 0 10px;
     border-radius: 10px;
     padding: 20px;
   }
   button {
     margin: 0 5px;
   }
 </style>

运行结果如下

接下来我们表达我们的需求:当攻击或者防御达到十点的时候给服务器发送请求

如果我们想要使用上节的watch进行实现

<template>
  <div class="person">
    <h2>攻击:{{ gongji }}</h2>
    <h2>防御:{{ fangyu }}</h2>
    <button @click="changeG">攻击点数加一</button>
    <button @click="changeF">防御点数加一</button>
</div>
 </template>
 
 <script lang="ts" setup name="Person11">
    import {ref,watch} from 'vue'
    let gongji = ref(0)
    let fangyu = ref(0)
    function changeG(){
      gongji.value += 1
    }
    function changeF(){
      fangyu.value += 1
    }
    watch([gongji,fangyu],(newValue,oldValue)=>{
      console.log(newValue,oldValue)
    })
   
 </script>
 
 <style scoped>
   .person {
     background-color: skyblue;
     box-shadow: 0 0 10px;
     border-radius: 10px;
     padding: 20px;
   }
   button {
     margin: 0 5px;
   }
 </style>

运行结果如下

接下来我们从Value中获取新的攻击和防御

watch([gongji,fangyu],(Value)=>{
      let [newG, newF] = Value
      if(newG>=10 || newF>=10){
        console.log('发送请求')
      }
    })

当我们点击九次的时候没有反应

再点击一次,就会发送请求了

🍋引入watchEffect

Vue3 中,watchEffect 是一个非常有用的函数,用于监视响应式数据的变化并执行相应的副作用代码。与 watch 监视特定的数据源不同,watchEffect 会自动追踪其内部的响应式数据,并在这些数据变化时重新运行传入的函数。

上一段中如果我们想要监视多个数据,使其更加方便,那么watchEffect就展现了它的作用

import {ref,watch,watchEffect} from 'vue'
watchEffect(()=>{
      if(gongji.value>=10 || fangyu.value>=10){
        console.log('发送请求')
      }
    })

下面依然是两张对比图片

🍋watch、watchEffect对比

watchEffect可以立即运行一个函数

watch对比watchEffect

  1. 都能监听响应式数据的变化,不同的是监听数据变化的方式不同
  2. watch:要明确指出监视的数据
  3. watchEffect:不用明确指出监视的数据(函数中用到哪些属性,那就监视哪些属性)。

🍋注意事项

避免在 watchEffect 中执行会引起无限循环的操作,比如直接修改 state 中的属性。
如果需要手动清除 watchEffect,可以将其返回的清除函数保存起来,并在适当的时机调用。

Vue3 中的 watchEffect 是一个强大而灵活的工具,可以帮助我们更方便地处理响应式数据的变化,并执行相应的副作用代码。

🍋总结

合理的使用watch和watchEffect可以让我们的开发变得更加高效

挑战与创造都是很痛苦的,但是很充实。

相关文章
|
12天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
115 64
|
12天前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
|
25天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
25天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
24天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
37 3
|
24天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
48 2
|
1月前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
52 1
|
缓存 JavaScript
vue中computed和watch的区别
vue中computed和watch的区别
|
缓存 JavaScript
Vue 中 computed 和 watch 的区别
Vue 中 computed 和 watch 的区别
93 0
|
7月前
|
缓存 JavaScript
聊一聊Vue中的computed和watch区别
聊一聊Vue中的computed和watch区别