专注app软件定制开发vue3中的watch的用法和几种常见情况

中的watch专注app软件定制开发是一个组合式的API专注app软件定制开发使用时需要引入

watch函数收三个参数:

  1. 需要进行监听的数据的数组,

  2. 监听的数据发生改变时的回调

  3. 配置项

  • 情况一(监视一个数字的变化)

    1. let count = ref(0)
    2. watch(count,(newV,oldV)=>{
    3.    console.log(newV,oldV);
    4. })
  • 情况二(监听俩个数据的变化)

    1. let year = ref(2000)
    2. let age = ref(22)
    3. function count(){
    4.    year.value++
    5.    age.value++
    6. }
    7. watch([year,age],(newV,oldV)=>{
    8.    console.log(newV,oldV);
    9. })

                                       

  • 加入配置项参数

    1. let year = ref(2000)
    2. let age = ref(22)
    3. function count(){
    4.   year.value++
    5.   age.value++
    6. }
    7. watch([year,age],(newV,oldV)=>{
    8.   console.log(newV,oldV);
    9. },{immediate:true}) //设置立即监听

                                        会立即监听一次

  • 情况三(监听reactive管理的对象的变化)

    1. const student = reactive({
    2.       name:'张三',
    3.       age:20,
    4.       a:{
    5.           b:{
    6.               salary:'20k'
    7.           }
    8.       }
    9. })
    10. function changeName(){
    11.    student.name = student.name + '@'
    12. }
    13. function changeAge(){
    14.    student.age ++
    15. }
    16. function changeSalary(){
    17.    student.a.b.salary = "50k"
    18. }
    19. watch(student,(newV,oldV)=>{
    20.    console.log(newV,oldV);
    21. })

注意:此时的oldValue失效,在监听深层次的数据时依旧可以监听到变化,可以看出vue3默认开启了深度监视

  • 情况4(监听对象中的某个属性)

    1. //上方代码watch改写为
    2. watch(()=>student.name,(newValue,oldValue)=>{
    3.    console.log(newValue,oldValue);
    4. })

                                                    

监听对象的某个属性需要将watch函数的第一个参数写为一个函数需要监听的属性作为返回值,可以正确的获得oldValue

  • 情况5(监听对象的某些属性)

    1. //watch改写为
    2. watch([()=>student.name,()=>student.age],(newValue,oldValue)=>{
    3.    console.log(newValue,oldValue);
    4. })

                                           

监听对象的一些属性传入的第一个参数是存放返回对象属性的函数的数组,oldValue有效

  • 情况6(监听对象套很深的对象的属性)

    1. const student = reactive({
    2.  a: {
    3.    b: {
    4.      salary: "20k",
    5.   },
    6. },
    7. });
    8. function changeSalary() {
    9.  student.a.b.salary = "50k";
    10. }
    11. watch(
    12. () => student.a,
    13. (newValue, oldValue) => {
    14.    console.log(newValue, oldValue);
    15. },
    16. { deep: true }
    17. );

                               

监听对象嵌套很深需要开启,oldValue不好使

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发