首页
技术小册
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.2.2 监听响应式变量 在Vue.js与TypeScript的联合开发中,理解和有效利用响应式系统的能力至关重要。Vue 3引入了Composition API,这一改变不仅增强了代码的复用性和组织性,还为开发者提供了更灵活的方式来监听和处理响应式变量的变化。本章节将深入探讨如何在Vue 3与TypeScript环境下监听响应式变量,包括基本概念、实现方式、最佳实践以及解决常见问题的方法。 #### 1. 响应式系统基础 在Vue中,响应式系统是其核心功能之一,它允许组件的视图自动更新以响应数据的变化。Vue 3通过Proxy对象改进了响应式系统的实现,使得数据监听更加高效且易于理解。在TypeScript中,类型系统为响应式数据的定义和操作提供了额外的保障,有助于减少运行时错误。 #### 2. 响应式变量的创建 在Vue 3的Composition API中,`reactive`和`ref`是创建响应式数据的两个主要函数。`reactive`用于创建响应式的对象,而`ref`则用于创建响应式的基本数据类型(如数字、字符串等),这些类型在内部被封装为对象,并对外提供一个`.value`属性来访问或修改其值。 ```typescript import { reactive, ref } from 'vue'; // 使用reactive创建响应式对象 const state = reactive({ count: 0, name: 'Vue' }); // 使用ref创建响应式基本数据类型 const count = ref(0); const message = ref('Hello, Vue!'); ``` #### 3. 监听响应式变量 监听响应式变量的变化是Vue开发中的常见需求,它允许开发者在数据变化时执行特定的逻辑。Vue 3提供了多种方式来监听响应式变量的变化。 ##### 3.1 使用`watch`和`watchEffect` Vue 3中的`watch`和`watchEffect`函数是监听响应式数据变化的关键工具。 - **`watch`**:允许你指定一个或多个响应式数据源,并在它们变化时执行回调函数。你可以通过`watch`的第三个参数(一个配置对象)来定制其行为,如立即执行、深度监听等。 ```typescript import { watch, ref } from 'vue'; const count = ref(0); watch(count, (newValue, oldValue) => { console.log(`count changed from ${oldValue} to ${newValue}`); }, { immediate: true, deep: false }); ``` - **`watchEffect`**:在响应式依赖发生变化时自动执行回调函数。与`watch`不同,`watchEffect`不需要手动指定要观察的数据源,它会自动收集其执行过程中访问的所有响应式属性作为依赖。 ```typescript import { watchEffect, ref } from 'vue'; const count = ref(0); watchEffect(() => { console.log(`count is ${count.value}`); }); // 修改count时,上面的回调函数会自动执行 count.value++; ``` ##### 3.2 停止监听 无论是`watch`还是`watchEffect`,它们都会返回一个停止监听的函数。当你不再需要监听某个响应式数据时,可以调用这个函数来避免潜在的内存泄漏。 ```typescript const stopWatching = watch(count, (newValue) => { // 处理逻辑 }); // 停止监听 stopWatching(); ``` #### 4. 最佳实践与注意事项 - **避免在模板或计算属性中直接修改响应式变量**:虽然技术上可行,但这样做会破坏Vue的响应式原则,使得数据流变得难以追踪和维护。 - **合理使用`watch`和`watchEffect`**:`watchEffect`适合执行副作用(即不依赖于前一个值的操作),而`watch`更适合于需要访问前一个值的场景。 - **注意性能影响**:特别是在深度监听大型对象或数组时,应谨慎使用`watch`的`deep`选项,因为它可能导致性能问题。 - **利用TypeScript的类型优势**:在定义响应式变量时,充分利用TypeScript的类型系统,可以减少运行时错误,提高代码的可维护性。 - **组件销毁时停止监听**:在Vue组件中,如果使用了`watch`或`watchEffect`,最好在组件销毁前停止监听,以避免潜在的内存泄漏。这可以通过在`onUnmounted`生命周期钩子中调用停止监听函数来实现。 #### 5. 实战案例 假设我们正在开发一个待办事项应用,其中包含一个待办事项列表和一个用于搜索待办事项的输入框。我们需要监听搜索输入框的值,以便在用户输入时过滤显示的待办事项列表。 ```typescript <template> <input v-model="searchQuery" placeholder="Search..."> <ul> <li v-for="todo in filteredTodos" :key="todo.id">{{ todo.text }}</li> </ul> </template> <script lang="ts"> import { defineComponent, ref, computed, watchEffect } from 'vue'; export default defineComponent({ setup() { const todos = ref<{ id: number; text: string }[]>([ // 假设的待办事项数据 ]); const searchQuery = ref(''); // 计算属性,根据searchQuery过滤todos const filteredTodos = computed(() => { return todos.value.filter(todo => todo.text.toLowerCase().includes(searchQuery.value.toLowerCase())); }); // 使用watchEffect监听searchQuery的变化,虽然在这个案例中直接使用computed属性更为合适 watchEffect(() => { console.log(`Filtered todos based on search query: "${searchQuery.value}"`); }); return { todos, searchQuery, filteredTodos }; } }); </script> ``` 在这个例子中,我们使用了`computed`属性来根据`searchQuery`的值动态过滤`todos`数组,并展示了如何使用`watchEffect`来监听`searchQuery`的变化(尽管在这个具体场景下,直接使用`computed`属性更为高效和合适)。 #### 6. 总结 监听响应式变量是Vue开发中不可或缺的一部分,特别是在构建复杂交互和动态界面时。通过合理使用Vue 3的`watch`、`watchEffect`以及TypeScript的类型系统,我们可以编写出既高效又易于维护的代码。记住,在开发过程中,保持对性能的关注,避免不必要的深度监听,以及及时停止不再需要的监听,都是确保应用稳定性和性能的重要措施。
上一篇:
10.2.1 关于计算变量
下一篇:
10.3 组合式API的应用
该分类下的相关小册推荐:
Vue.js从入门到精通(四)
移动端开发指南
vue项目构建基础入门与实战
Vue源码完全解析
Vue面试指南
TypeScript和Vue从入门到精通(二)
vuejs组件实例与底层原理精讲
Vue.js从入门到精通(二)
TypeScript和Vue从入门到精通(五)
Vue原理与源码解析
TypeScript和Vue从入门到精通(四)
VUE组件基础与实战