1、Reactive 的深度响应式
1.1、基本用法
vue
<script setup>
import { reactive } from 'vue'
const state = reactive({
count: 0,
user: {
name: 'Alice',
age: 30
}
})
const increment = () => state.count++
const updateName = () => state.user.name = 'Bob'
</script>
1.2、Todolist 实战
vue
<script setup>
import { reactive } from 'vue'
const state = reactive({
todos: [
{ id: 1, text: 'Learn Vue3', done: false }
],
newTodo: ''
})
const addTodo = () => {
state.todos.push({
id: Date.now(),
text: state.newTodo,
done: false
})
state.newTodo = ''
}
</script>
2、Ref 的灵活应用
2.1、基础使用
vue
<script setup>
import { ref } from 'vue'
const count = ref(0)
const user = ref({ name: 'Alice' })
const increment = () => count.value++
const updateName = () => user.value.name = 'Bob'
</script>
2.2、Ref vs Reactive
特性 | Ref | Reactive |
---|---|---|
适用类型 | 基本类型 / 对象类型 | 对象类型 |
响应式本质 | 通过.value 访问响应式数据 | 直接访问响应式数据 |
深层响应 | 对象类型自动转为 Reactive | 深度响应 |
性能优化 | 基本类型更高效 | 对象类型更高效 |
使用原则:
javascript
// 基本类型
const num = ref(0)
// 浅层次对象
const user = ref({ name: 'Alice' })
// 深层次对象
const complex = reactive({
a: { b: { c: 0 } }
})
2.3、标签与组件引用
DOM 元素引用:
vue
<template>
<h1 ref="title">Hello Vue3</h1>
<button @click="updateTitle">Update</button>
</template>
<script setup>
import { ref } from 'vue'
const title = ref<HTMLHeadingElement>(null)
const updateTitle = () => {
title.value.style.color = 'red'
title.value.textContent = 'Updated!'
}
</script>
组件实例引用:
vue
<!-- 父组件 -->
<template>
<MyComponent ref="child" />
<button @click="callChildMethod">Call Child</button>
</template>
<script setup>
import MyComponent from './MyComponent.vue'
import { ref } from 'vue'
const child = ref()
const callChildMethod = () => {
child.value.sayHello()
console.log(child.value.count)
}
</script>
<!-- 子组件 -->
<script setup>
import { ref, defineExpose } from 'vue'
const count = ref(0)
const sayHello = () => console.log('Hello!')
defineExpose({
count,
sayHello
})
</script>
总结对比
功能点 | Setup 函数 | Reactive | Ref |
---|---|---|---|
作用 | 组件逻辑入口 | 深度响应式对象 | 灵活响应式变量 |
适用场景 | 所有组合式 API 使用 | 复杂对象状态管理 | 基础类型 / 简单对象管理 |
性能考量 | 优先使用组合式 API | 对象层级越深越推荐 | 基本类型优先 |
特殊能力 | 访问 props/context | 自动依赖收集 | 模板引用 |
通过合理运用这些特性,可以构建出更高效、更易维护的 Vue3 应用。