HLJ 发布于
2024-05-23 14:51:12
301阅读

watch 侦听器

上一篇文章:

生命周期钩子

下一篇文章:

模板引用

侦听数据源类型

watch 的第一个参数是 “数据源”,它可以是:

  • 1、一个 ref (包括计算属性)、
  • 2、一个响应式对象、
  • 3、一个 getter 函数
  • 4、多个数据源组成的数组:
const x = ref(0)
const y = ref(0)

// 单个 ref
watch(x, (newX) => {
  console.log(`x is ${newX}`)
})

// getter 函数
watch(
  () => x.value + y.value,
  (sum) => {
    console.log(`sum of x + y is: ${sum}`)
  }
)

// 多个来源组成的数组
watch([x, () => y.value], ([newX, newY]) => {
  console.log(`x is ${newX} and y is ${newY}`)
})
  • 特别注意,不能直接侦听响应式对象的属性值,例如:
const obj = reactive({ count: 0 })

// 错误,因为 watch() 得到的参数是一个 number
watch(obj.count, (count) => {
  console.log(`Count is: ${count}`)
})
  • 这里需要用一个返回该属性的 getter 函数:
// 提供一个 getter 函数
watch(
  () => obj.count,
  (count) => {
    console.log(`Count is: ${count}`)
  }
)

深层侦听器

watch(
  () => state.someObject,
  (newValue, oldValue) => {
    // 注意:`newValue` 此处和 `oldValue` 是相等的
    // *除非* state.someObject 被整个替换了
  },
  { deep: true }
)

即时回调的侦听器

watch(
  source,
  (newValue, oldValue) => {
    // 立即执行,且当 `source` 改变时再次执行
  },
  { immediate: true }
)

一次性侦听器

watch(
  source,
  (newValue, oldValue) => {
    // 当 `source` 变化时,仅触发一次
  },
  { once: true }
)

watchEffect()

  • watchEffect()是深层侦听器的简写 例如深度监听代码:
const todoId = ref(1)
const data = ref(null)

watch(
  todoId,
  async () => {
    const response = await fetch(
      `https://jsonplaceholder.typicode.com/todos/${todoId.value}`
    )
    data.value = await response.json()
  },
  { immediate: true }
)
  • watchEffect()简写后的代码:
watchEffect(async () => {
  const response = await fetch(
    `https://jsonplaceholder.typicode.com/todos/${todoId.value}`
  )
  data.value = await response.json()
})
当前文章内容为原创转载请注明出处:http://www.good1230.com/detail/2024-05-23/648.html
最后生成于 2024-06-22 12:07:58
上一篇文章:

生命周期钩子

下一篇文章:

模板引用

此内容有帮助 ?
0