夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

  • 响应式

  • 组件

  • 过渡&动画

  • 可复用性

  • 工具

  • 规模化

  • 路由(核心)

  • 组合式

    • 响应式包装
    • 计算属性
    • 侦听器
      • 侦听器
      • 立即侦听 watchEffect()
      • 停止侦听器
    • 依赖注入
  • Vuex

  • Pinia

  • 其他

  • Vue3 源码学习记录

  • 《Vue》笔记
  • 组合式
夜猫子
2022-08-12
目录

侦听器

# 侦听器

  • 第一个参数:可以是:ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组。
  • 第二个参数:一个回调函数,该函数有两个默认参数,分别为依赖的当前值以及改变前的值。
  • 第三个参数:一个可选对象。 1.{ deep: true },用于对对象进行深度侦听。 2.{flush: 'post'},回调默认为DOM更新前调用,flush: 'post'表示让侦听器回调能访问被 Vue 更新之后的DOM。

非必要不建议使用深度侦听,因为其会侦听所有嵌套属性,开销很大。

<script setup>
import { ref, watch } from 'vue'

const x = ref(0)
const y = ref(0)

// 单个 ref
watch(x, (newX,oldX) => {
  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}`)
	}
	//{ deep: true } //对象的深度侦听
)
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 立即侦听 watchEffect()

watch() 侦听器只有在依赖变更时触发,如果想要在侦听器被创建时就立即执行一遍回调,可以使用 watchEffect() 。

watchEffect() 接收一个回调函数,该回调函数会立即执行一次,当函数中的依赖变更时,回调会再次执行。

可以将watchEffect()

const id =ref<string>('001')
const stop=watchEffect(() => console.log(id.value))
stop()//当stop被调用时,stop所代表的监听函数终止监听
1
2
3

# 停止侦听器

侦听器会随着宿主组件的销毁而销毁,但如果侦听器是使用异步语句创建的,那么他可能不会绑定到当前组件。因此必须手动停止它,以防内存泄漏。

可以通过调用 watch 或 watchEffect 返回的函数来手动停止一个侦听器:

const unwatch = watchEffect(() => {})

// ...当该侦听器不再需要时
unwatch()
1
2
3
4
编辑 (opens new window)
上次更新: 2023/7/11 18:57:41
计算属性
依赖注入

← 计算属性 依赖注入→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式