首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 7 章 处理用户交互
7.1 事件的监听与处理
7.1.1 事件监听示例
7.1.2 多事件处理
7.1.3 事件修饰符
7.2 Vue中的事件类型
7.2.1 常用的事件类型
7.2.2 按键修饰符
7.3 实战一:随鼠标移动的小球
7.4 实战二:弹球游戏
第 8 章 组件基础
8.1 关于Vue应用与组件
8.1.1 Vue应用的数据配置选项
8.1.2 定义组件
8.2 组件中数据与事件的传递
8.2.1 为组件添加外部属性
8.2.2 处理组件事件
8.2.3 在组件上使用v-model指令
8.3 自定义组件的插槽
8.3.1 组件插槽的基本用法
8.3.2 多具名插槽的用法
8.4 动态组件的简单应用
8.5 实战:开发一款小巧的开关按钮组件
第 9 章 组件进阶
9.1 组件的生命周期与高级配置
9.1.1 生命周期方法
9.1.2 应用的全局配置选项
9.1.3 组件的注册方式
9.2 组件props属性的高级用法
9.2.1 对props属性进行验证
9.2.2 props的只读性质
9.2.3 组件数据注入
9.3 组件Mixin技术
9.3.1 使用Mixin来定义组件
9.3.2 Mixin选项的合并
9.3.3 进行全局Mixin
9.4 使用自定义指令
9.4.1 认识自定义指令
9.4.2 自定义指令的参数
9.5 组件的Teleport功能
第 10 章 Vue响应性编程
10.1 响应性编程原理与在Vue中的应用
10.1.1 手动追踪变量的变化
10.1.2 Vue中的响应性对象
10.1.3 独立的响应性值Ref的应用
10.2 响应式的计算与监听
10.2.1 关于计算变量
10.2.2 监听响应式变量
10.3 组合式API的应用
10.3.1 关于setup方法
10.3.2 在setup方法中定义生命周期行为
10.4 实战:支持搜索和筛选的用户列表示例
10.4.1 常规风格的示例工程开发
10.4.2 使用组合式API重构用户列表页面
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(三)
小册名称:TypeScript和Vue从入门到精通(三)
### 10.1.3 独立的响应性值Ref的应用 在Vue 3及其配套的Composition API中,`ref`是一个非常核心且强大的概念,它允许我们创建响应式的引用对象。这些对象不仅限于基础数据类型(如字符串、数字、布尔值),还可以是复杂数据类型(如对象、数组等)。`ref`作为独立的响应性值,在Vue组件的状态管理中扮演着至关重要的角色。本章节将深入探讨`ref`的应用,包括其基本用法、高级技巧以及在Vue 3项目中的实际应用场景。 #### 10.1.3.1 `ref`的基本用法 在Vue 3中,`ref`函数是`@vue/reactivity`库提供的一个API,它用于创建一个响应式的引用对象。这个对象包含一个名为`value`的属性,用于存储实际的值。当`value`的值改变时,Vue会自动追踪这些变化,并通知相关的视图进行更新。 ```javascript import { ref } from 'vue'; const count = ref(0); // 创建一个响应式的引用对象,初始值为0 console.log(count.value); // 访问和打印实际的值:0 count.value = 1; // 修改值,视图将自动更新 ``` 在模板中,Vue会自动解包`ref`对象,所以我们可以直接使用`count`而不需要`.value`后缀: ```html <template> <div>{{ count }}</div> </template> <script> import { ref } from 'vue'; export default { setup() { const count = ref(0); return { count }; } } </script> ``` #### 10.1.3.2 使用`ref`管理复杂类型数据 虽然`ref`通常用于基础数据类型,但它同样适用于复杂类型数据(如对象或数组)。不过,对于复杂类型,Vue 3推荐使用`reactive`来创建响应式对象,因为`reactive`能够提供更深入的响应性能力(如对象的属性变更也能触发视图更新)。然而,在某些场景下,如需要单独追踪复杂类型数据中的某个属性时,`ref`依然有其用武之地。 ```javascript import { ref } from 'vue'; const user = ref({ name: 'Alice', age: 30 }); // 更改对象属性 user.value.name = 'Bob'; // 注意:这种方式不会触发视图的自动更新,因为user.value本身是响应式的,但其内部的属性变更默认不是响应式的 // 如果需要响应式地更新对象属性,可以考虑使用Vue.set或直接通过reactive import { reactive } from 'vue'; const userReactive = reactive({ name: 'Alice', age: 30 }); userReactive.name = 'Bob'; // 这种方式会触发视图的自动更新 ``` #### 10.1.3.3 `ref`在Composition API中的高级应用 随着对Vue 3和Composition API的深入理解,`ref`的应用可以变得更加灵活和强大。以下是一些高级应用场景: - **响应式引用链**:在复杂应用中,可能需要基于一个`ref`的值来创建另一个`ref`。Vue 3能够智能地处理这种响应式引用链,确保当基础值变化时,依赖于此值的其他响应式引用也能自动更新。 - **计算属性与`ref`**:结合`computed`函数,可以基于`ref`的值创建出计算属性,这些计算属性同样是响应式的。这对于处理复杂的逻辑或派生数据非常有用。 - **监视`ref`的变化**:使用`watch`或`watchEffect`可以监视`ref`值的变化,并执行相应的逻辑。这对于实现复杂的响应式逻辑或副作用(side effects)非常有帮助。 - **与`reactive`的配合使用**:虽然`ref`和`reactive`在用途上有所区别,但在实际项目中,它们经常需要配合使用以满足复杂的响应式需求。 #### 10.1.3.4 实际案例:使用`ref`构建计数器组件 下面是一个简单的计数器组件示例,展示了如何使用`ref`来管理组件的状态: ```vue <template> <div> <p>当前计数:{{ count }}</p> <button @click="increment">增加</button> <button @click="decrement">减少</button> </div> </template> <script> import { ref } from 'vue'; export default { setup() { const count = ref(0); function increment() { count.value++; } function decrement() { count.value--; } return { count, increment, decrement }; } } </script> ``` 在这个例子中,`count`是一个`ref`,用于存储计数器的当前值。通过按钮点击事件触发的`increment`和`decrement`函数分别用于增加和减少计数器的值。由于`count`是响应式的,当它的值发生变化时,视图会自动更新以反映最新的计数。 #### 10.1.3.5 总结 `ref`作为Vue 3中Composition API的一部分,提供了一种灵活且强大的方式来创建和管理响应式数据。通过本章节的学习,我们了解了`ref`的基本用法、在复杂类型数据中的应用、以及在Composition API中的高级应用技巧。掌握了这些知识,你将能够更加自信地在Vue 3项目中利用`ref`来构建高效且响应式的用户界面。随着对Vue 3的深入探索,你会发现`ref`与其他响应式API(如`reactive`、`computed`、`watch`等)的配合使用,能够极大地提升你的开发效率和项目的可维护性。
上一篇:
10.1.2 Vue中的响应性对象
下一篇:
10.2 响应式的计算与监听
该分类下的相关小册推荐:
Vue源码完全解析
Vue面试指南
TypeScript和Vue从入门到精通(四)
TypeScript和Vue从入门到精通(五)
VUE组件基础与实战
Vue3技术解密
移动端开发指南
TypeScript和Vue从入门到精通(一)
TypeScript和Vue从入门到精通(二)
vue项目构建基础入门与实战
Vue.js从入门到精通(四)
Vue原理与源码解析