侧边栏壁纸
博主头像
陌上花 博主等级

回首万事皆休

  • 累计撰写 69 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
Vue

Vue 监视

种向日葵的人
2025-03-27 / 0 评论 / 0 点赞 / 8 阅读 / 0 字

Why

  • 以下主要介绍在Vue中如何使用监视数据的变化。
  • 需要导入watch

How

  • 监视主要有以下五种情况.

ref的基本数据

  • 这个时候可以直接监视
let sum = ref(0);

watch(sum, (newValue, oldValue) => {

  console.log("sum值发生了变化", newValue, oldValue);

});

ref包裹的对象

  • 这个时候监视需要写成函数模式
let my = ref({

  name: "peng",

  age: 25,

});
function ChangeAge() {

  my.value.age++;

  if (my.value.age > 30) {

    stopWatch();

  }

}

let stopWatch = watch(

  () => my.value.age,

  (newValue, oldValue) => {

    console.log("sum值发生了变化", newValue, oldValue);

  },

  {

    deep: true,

  }

);
  • 注意监视是有返回值的,如果使用这个返回值函数,则表示取消监视。

reactive的对象的基本类型

  • 这个时候需要使用包含getter的函数。
let person = reactive({

  name: "Peng",

  age: 3,

  phone: 15154,

  car: {

    c1: "宝马",

    c2: "奔驰",

  },

});
watch(

  () => person.age,

  (newValue, oldValue) => {

    console.log("person.age值发生了变化", newValue, oldValue);

  }

);
  • 注意使用reactive的对象调用的时候是不需要使用.value的。

reactive包裹的对象

  • 类似于上述,如果函数返回的是一个对象,则需要开启deep:true的选项,因为其实reactive内部还是使用ref来实现的。
watch(

    () => person.car,

    (newValue, oldValue) => {

        console.log("person.car.c1值发生了变化", newValue, oldValue);

    },

    { deep: true }

);

返回一个包裹的数组

  • 如果需要监测多个值的变化,则需要监测一个数组
watch([() => person.age, () => person.car.c1], ([age, c1], [oldAge, oldC1]) => {

  console.log("person.age和person.car.c1值发生了变化", age, c1, oldAge, oldC1);

});
  • 注意区别于上述的newValueoldValue,这个时候表示的是一个数组的值而不是一个单一的对象。

Tips

  • 注意,在绝大部分的时候还是建议使用返回函数,因为这样是最稳妥的方案。大部分时候第五种监视才是最常见的写法。
0
博主关闭了所有页面的评论