首页
技术小册
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.2 Vue中的响应性对象 在Vue.js框架中,响应性系统是其核心特性之一,它允许Vue应用能够响应数据的变化并自动更新DOM。这种响应性是通过Vue的响应性对象实现的,它们是Vue组件状态管理的基石。本章节将深入探讨Vue中的响应性对象,包括其工作原理、声明方式、使用场景以及最佳实践。 #### 10.1.2.1 理解响应性原理 Vue的响应性系统基于ES6的Proxy(在某些旧版本Vue中使用Object.defineProperty)来实现。当Vue实例被创建时,它会遍历data选项中的属性,并使用Proxy(或Object.defineProperty)将这些属性转换为getter/setter。这样一来,每当这些属性的值被访问或修改时,Vue就能感知到这些变化,并执行相应的依赖更新逻辑。 - **Proxy vs Object.defineProperty**:Proxy提供了更全面的拦截能力,包括属性值的读取、设置、枚举、函数调用等,而Object.defineProperty只能拦截属性的get和set操作。Vue 3全面采用Proxy来重构其响应性系统,以提供更强大的功能和更好的性能。 #### 10.1.2.2 声明响应性对象 在Vue组件中,你可以通过`data`函数返回一个对象来声明响应性状态。这个对象中的每个属性都会自动变为响应性的。 ```javascript <template> <div> <p>{{ message }}</p> <button @click="changeMessage">Change Message</button> </div> </template> <script> export default { data() { return { message: 'Hello, Vue!' }; }, methods: { changeMessage() { this.message = 'Vue is awesome!'; } } } </script> ``` 在上面的例子中,`message`属性是响应性的。当`changeMessage`方法被调用时,`message`的值会改变,并且由于Vue的响应性系统,与之相关的DOM也会自动更新以反映新的值。 #### 10.1.2.3 使用`computed`属性 除了直接在`data`中声明响应性数据外,Vue还提供了`computed`属性,它允许你基于组件的响应性状态计算并返回一个值。这个计算值是基于它们的响应性依赖进行缓存的,只有当相关依赖发生改变时,计算值才会重新求值。 ```javascript <script> export default { data() { return { firstName: 'John', lastName: 'Doe' }; }, computed: { fullName() { return `${this.firstName} ${this.lastName}`; } } } </script> ``` 在这个例子中,`fullName`是一个计算属性,它基于`firstName`和`lastName`的值计算得到。只要`firstName`或`lastName`中的任何一个发生变化,`fullName`就会自动更新。 #### 10.1.2.4 响应性对象的深度与浅层 Vue的响应性系统是深度响应的,这意味着它不仅对对象的顶层属性进行响应性处理,还递归地处理对象内部嵌套的属性。但是,对于数组和对象的一些特定操作(如通过索引直接设置数组项、添加新属性到对象),Vue可能无法自动追踪这些变化,因为JavaScript的限制或Vue内部优化的考虑。 对于这种情况,Vue提供了`Vue.set`(Vue 3中推荐使用`reactive`或`ref`的`.value`属性配合直接赋值)和`vm.$set`实例方法来确保这些变化能够被Vue的响应性系统捕获。 ```javascript // Vue 2.x 示例 this.$set(this.someObject, 'newProperty', 'newValue'); // Vue 3.x 使用 Composition API 示例 import { reactive } from 'vue'; const state = reactive({ someObject: { existingProperty: 'existingValue' } }); // 直接添加新属性 state.someObject.newProperty = 'newValue'; // Vue 3 能够追踪这种变化 ``` #### 10.1.2.5 响应式引用(`ref`)与响应式对象(`reactive`) 在Vue 3的Composition API中,引入了`ref`和`reactive`来更细粒度地控制响应性。`ref`用于处理基本数据类型的响应性(虽然内部也是通过对象封装),而`reactive`用于处理对象的响应性。 - **`ref`**:用于基本数据类型(如字符串、数字等),但返回的是一个对象,其中包含一个`.value`属性来存储实际的值。这样做是为了确保即使是基本类型也能被Vue的响应性系统追踪。 ```javascript import { ref } from 'vue'; const count = ref(0); console.log(count.value); // 访问实际值 count.value++; // 修改值 ``` - **`reactive`**:用于对象,直接返回一个响应性的对象,你可以像操作普通对象一样操作它,Vue会自动追踪其内部属性的变化。 ```javascript import { reactive } from 'vue'; const state = reactive({ count: 0 }); state.count++; // Vue 会自动追踪这个变化 ``` #### 10.1.2.6 响应性对象的最佳实践 1. **明确响应性需求**:在声明响应性对象之前,明确你的需求是处理基本类型还是对象/数组,以及是否需要深度响应性。 2. **使用Composition API的`ref`和`reactive`**:在Vue 3中,尽量使用Composition API来管理你的响应性状态,它提供了更灵活和强大的方式来组织和重用逻辑。 3. **避免在模板中直接修改响应性状态**:虽然技术上可行,但在模板中直接修改状态可能会导致代码难以理解和维护。推荐在methods或computed属性中处理逻辑。 4. **利用计算属性和侦听器**:合理使用计算属性来缓存基于响应性状态的派生值,使用侦听器来观察响应性状态的变化并执行副作用。 5. **注意Vue的响应性限制**:了解Vue无法自动追踪某些特定操作(如直接通过索引修改数组项)的局限性,并学会使用`Vue.set`(Vue 2.x)或`.value`属性直接赋值(Vue 3.x)来规避这些问题。 通过深入理解Vue中的响应性对象,你将能够更有效地管理Vue组件的状态,并创建出更加动态和响应式的用户界面。
上一篇:
10.1.1 手动追踪变量的变化
下一篇:
10.1.3 独立的响应性值Ref的应用
该分类下的相关小册推荐:
TypeScript和Vue从入门到精通(二)
TypeScript和Vue从入门到精通(一)
Vue源码完全解析
Vue.js从入门到精通(一)
Vue面试指南
vue项目构建基础入门与实战
TypeScript和Vue从入门到精通(五)
Vue.js从入门到精通(二)
Vue3技术解密
TypeScript和Vue从入门到精通(四)
Vue.js从入门到精通(三)
移动端开发指南