首页
技术小册
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.3.1 关于`setup`方法 在Vue 3中,`setup`函数是Composition API的核心入口点,它提供了一个全新的组件逻辑编写方式,使得状态管理、逻辑复用以及类型推导等方面变得更加灵活和强大。本章节将深入解析`setup`方法的各个方面,包括其基本概念、用法、生命周期钩子集成、响应式状态管理以及与其他Composition API的协同工作。 #### 10.3.1.1 `setup`方法基础 `setup`函数是组件内使用Composition API的起点。它是组件创建过程中最早被调用的函数之一(在`beforeCreate`和`created`生命周期钩子之前),且它是唯一一个在`this`上下文不是组件实例的函数。这意味着在`setup`内部,你不能直接通过`this`来访问组件实例的属性和方法。 `setup`函数接受两个参数: - `props`:一个包含组件外部传入的所有`props`的响应式对象。 - `context`:一个普通JavaScript对象,包含了`attrs`(非`props`的Attributes)、`slots`(插槽)、`emit`(触发事件的方法)等。 ```typescript import { defineComponent } from 'vue'; export default defineComponent({ props: { title: String }, setup(props, { attrs, slots, emit }) { // 使用props, attrs, slots, emit console.log(props.title); // 逻辑代码... return { // 需要暴露给模板的响应式状态或方法 }; } }); ``` #### 10.3.1.2 响应式状态管理 在`setup`中,我们通常会使用Composition API中的`reactive`、`ref`等函数来创建响应式状态。这些状态能够自动地跟踪其依赖,并在变化时通知视图进行更新。 - **`ref`**:用于处理基本数据类型的响应式。 - **`reactive`**:用于处理对象或数组的响应式。 ```typescript import { defineComponent, ref, reactive } from 'vue'; export default defineComponent({ setup() { const count = ref(0); const user = reactive({ name: 'Alice', age: 30 }); function increment() { count.value++; } function updateName(newName: string) { user.name = newName; } return { count, user, increment, updateName }; } }); ``` #### 10.3.1.3 生命周期钩子在`setup`中的使用 Vue 3提供了`onMounted`、`onUpdated`、`onUnmounted`等Composition API版本的生命周期钩子,允许我们在`setup`函数内部以函数的形式使用这些钩子。 ```typescript import { defineComponent, onMounted, onUnmounted, ref } from 'vue'; export default defineComponent({ setup() { const count = ref(0); onMounted(() => { console.log('Component is mounted!'); // 执行一些初始化操作 }); onUnmounted(() => { console.log('Component is unmounted!'); // 执行清理操作,如移除定时器、取消订阅等 }); return { count }; } }); ``` #### 10.3.1.4 `setup`中的计算属性与监听器 在`setup`中,我们可以使用`computed`和`watch`/`watchEffect`来创建计算属性和监听器。 - **`computed`**:用于创建计算属性,基于它们的响应式依赖进行缓存。 - **`watch`/`watchEffect`**:用于监听响应式数据的变化,并执行副作用。 ```typescript import { defineComponent, ref, computed, watch, watchEffect } from 'vue'; export default defineComponent({ setup() { const count = ref(0); const doubleCount = computed(() => count.value * 2); watchEffect(() => { console.log(`Count is: ${count.value}`); // 这段代码会在组件渲染时立即执行, // 以及`count`变化时重新执行 }); watch(count, (newVal, oldVal) => { console.log(`Count changed from ${oldVal} to ${newVal}`); // 这段代码仅在`count`变化时执行 }); return { count, doubleCount }; } }); ``` #### 10.3.1.5 `setup`与模板的交互 `setup`函数返回的对象中的所有属性都将被暴露给模板,这使得我们可以在模板中直接使用这些响应式状态和方法。同时,由于`setup`中没有`this`,因此无法通过传统方式访问组件实例上的属性或方法。但可以通过`context`参数中的`attrs`、`slots`、`emit`来与模板进行更高级的交互。 ```vue <template> <div> <h1>{{ user.name }}</h1> <button @click="increment">Increment</button> <slot name="custom-slot"></slot> </div> </template> <script lang="ts"> import { defineComponent, reactive, ref } from 'vue'; export default defineComponent({ setup() { const user = reactive({ name: 'Alice' }); const count = ref(0); function increment() { count.value++; } return { user, count, increment }; } }); </script> ``` #### 10.3.1.6 总结 `setup`方法是Vue 3中Composition API的核心,它提供了一种全新的、更灵活的组件逻辑编写方式。通过`setup`,我们可以更细粒度地控制组件的响应式状态、生命周期钩子、计算属性、监听器等,同时也使得逻辑复用和类型推导变得更加容易。然而,由于`setup`的特殊性(如没有`this`上下文),我们需要适应新的编程模式,包括如何正确地暴露状态和方法给模板,以及如何利用`context`参数与模板进行交互。通过深入学习和实践`setup`方法,我们可以更加高效地开发Vue 3应用,提升开发效率和代码质量。
上一篇:
10.3 组合式API的应用
下一篇:
10.3.2 在setup方法中定义生命周期行为
该分类下的相关小册推荐:
VUE组件基础与实战
TypeScript和Vue从入门到精通(二)
Vue.js从入门到精通(一)
Vue.js从入门到精通(二)
TypeScript和Vue从入门到精通(五)
TypeScript和Vue从入门到精通(四)
Vue面试指南
Vue.js从入门到精通(四)
TypeScript和Vue从入门到精通(一)
vuejs组件实例与底层原理精讲
vue项目构建基础入门与实战
Vue原理与源码解析