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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| import { ref, computed, watch, watchEffect } from 'vue'
export default {
setup() {
const firstName = ref('John')
const lastName = ref('Doe')
// 计算属性
const fullName = computed(() => `${firstName.value} ${lastName.value}`)
// 可写的计算属性
const fullNameWritable = computed({
get: () => `${firstName.value} ${lastName.value}`,
set: (value) => {
const names = value.split(' ')
firstName.value = names[0]
lastName.value = names[1]
}
})
// 监听单个 ref
watch(firstName, (newVal, oldVal) => {
console.log(`firstName changed from ${oldVal} to ${newVal}`)
})
// 监听多个源
watch(
[firstName, lastName],
([newFirst, newLast], [oldFirst, oldLast]) => {
console.log('Names changed:', { newFirst, newLast })
}
)
// 深度监听对象
const user = reactive({ name: 'John', details: { age: 30 } })
watch(
user,
(newUser, oldUser) => {
console.log('User changed:', newUser)
},
{ deep: true }
)
// 立即执行的 watch
watchEffect(() => {
console.log(`Current full name: ${fullName.value}`)
})
return {
firstName,
lastName,
fullName,
fullNameWritable
}
}
}
|