VUE3的组合式api关于watch的几种情况

1,654 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

在vue3中有了Composition Api的概念,所以watch(监听)都放到了setup()里。首先我们需要定义数据,引入wahtc

import { ref, reactive, watch } from "vue";
  setup() {
    let sum = ref(0);
    let hello = ref("你好");
    let person = reactive({
      name: "lyy",
      age: 18,
      job: {
        name: "前端",
        salary: 20,
      },
    });
   }

watch接受三个参数(要监视的数据,回调函数,配置型)

情况一,监视ref所定义的单个响应式数据

watch(sum, (newValue, oldValue) => {
  console.log("sum变了", newValue, oldValue);
},{
  immediate:true,
});

情况二、监视ref所定义的多个响应式数据

watch([sum, hello], (newValue, oldValue) => {
  console.log("sum或者hello变了", newValue, oldValue);
});

情况三、监视reactive所定义的单个响应式数据,

注意:此处无法获得正确的oldValue,强制开始了深度监视(deep配置无效)

watch(person, (newValue, oldValue) => {
  console.log("person变了", newValue, oldValue);
});

情况四、监视reactive所定义的单个响应式数据的某个属性,

watch(
  () => person.age,
  (newValue, oldValue) => {
    console.log("person的age变了", newValue, oldValue);
  }
);

情况五、监视reactive所定义的单个响应式数据的某些属性,

watch([() => person.age, () => person.name], (newValue, oldValue) => {
  console.log("person的age变了", newValue, oldValue);
});

情况六、监视reactive所定义的单个响应式数据的某个对象类型数据,

watch(
  () => person.job,
  (newValue, oldValue) => {
    console.log("person的job变了", newValue, oldValue);
  },
  {
    deep: true,
  }
);