首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
10.1 注册自定义指令
10.1.1 全局自定义指令
10.1.2 局部自定义指令
10.2 钩子函数
10.3 绑定值的类型
10.3.1 绑定数值
10.3.2 绑定字符串
10.3.3 绑定对象字面量
11.1 注册组件
11.1.1 注册全局组件
11.1.2 注册局部组件
11.2 向子组件传递数据
11.2.1 Prop基本用法
11.2.2 数据验证
11.3 监听子组件事件
11.3.1 监听自定义事件
11.3.2 监听原生事件
11.4 插槽的使用
11.4.1 基础用法
11.4.2 编译作用域
11.4.3 默认内容
11.4.4 命名插槽
11.4.5 作用域插槽
11.5 混入
11.5.1 基础用法
11.5.2 选项合并
11.6 动态组件
11.6.1 动态组件的用法
11.6.2 缓存效果
12.1 什么是组合API
12.2 setup()函数
12.3 响应式API
12.3.1 reactive()方法
12.3.2 watchEffect()方法
12.3.3 ref()方法
12.3.4 computed()方法
12.3.5 watch()方法
12.4 生命周期钩子函数
12.5 使用ref获取DOM元素
13.1 单元素过渡
13.1.1 CSS过渡
13.1.2 过渡的类名
13.1.3 自定义过渡的类名
13.1.4 CSS动画
13.1.5 使用JavaScript钩子函数实现动画
13.2 多元素过渡
13.2.1 多元素过渡的用法
13.2.2 设置元素的key属性
13.2.3 过渡模式的设置
13.3 多组件过渡
13.4 列表过渡
14.1 什么是虚拟DOM
14.2 render()函数的使用
14.2.1 基本用法
14.2.2 h()函数
14.3 使用JavaScript代替模板功能
15.1 路由基础
15.1.1 引入Vue Router
15.1.2 基本用法
15.1.3 动态路由匹配
15.1.4 命名路由
15.2 编程式导航
15.3 嵌套路由
15.4 命名视图
15.5 高级用法
15.5.1 beforeEach钩子函数
15.5.2 scrollBehavior方法
当前位置:
首页>>
技术小册>>
Vue.js从入门到精通(三)
小册名称:Vue.js从入门到精通(三)
### 12.2 `setup()` 函数:Vue 3 组件的核心舞台 在Vue 3中,`setup()`函数是组件内使用Composition API的入口点,它标志着Vue组件开发方式的一次重大变革。相比Vue 2的Options API,Composition API通过`setup()`函数提供了一种更加灵活、逻辑复用的方式来组织组件代码。在本章中,我们将深入探讨`setup()`函数的各个方面,包括其基础用法、生命周期钩子、响应式引用、计算属性、侦听器和组件通信等。 #### 12.2.1 `setup()`函数基础 `setup()`函数是组件中所有Composition API调用的起点。它在组件被创建之前被调用,并且是`beforeCreate`和`created`生命周期钩子之前被调用的唯一生命周期函数。`setup()`函数接收两个参数:`props`和`context`。 - **props**:一个包含组件外部传入的所有props的对象。这个对象在组件内部是响应式的,但你不能解构它,否则将失去响应性。 - **context**:一个普通的JavaScript对象,提供了组件实例上的属性如`attrs`、`slots`、`emit`等。这允许你在`setup()`函数内部访问这些属性和方法。 ```javascript <template> <div>{{ count }}</div> <button @click="increment">Increment</button> </template> <script> import { ref } from 'vue'; export default { props: { initialCount: Number }, setup(props, { emit }) { const count = ref(props.initialCount); function increment() { count.value++; emit('update:count', count.value); } return { count, increment }; } }; </script> ``` 在上面的例子中,`setup()`函数接收了`props`并基于`initialCount` prop创建了一个响应式的`count`引用。然后,定义了一个`increment`函数来更新`count`的值,并通过`emit`方法触发一个自定义事件。最后,通过返回对象,使得`count`和`increment`在模板中可用。 #### 12.2.2 响应式引用与计算属性 在`setup()`函数中,我们经常使用`ref`和`reactive`来创建响应式状态。`ref`用于基本数据类型,而`reactive`用于对象或数组。 - **ref**:通过`ref`创建的响应式数据是一个对象,该对象包含一个`.value`属性来存储实际的值。 - **reactive**:`reactive`允许你直接以响应式方式操作对象或数组,无需`.value`属性。 ```javascript import { ref, reactive, computed } from 'vue'; setup() { const count = ref(0); const user = reactive({ name: 'Alice', age: 30 }); const fullName = computed(() => { return `${user.name} ${user.surname || ''}`; }); return { count, user, fullName }; } ``` 在上面的代码中,我们还使用了`computed`来创建一个计算属性`fullName`,它基于`user`对象动态生成全名。计算属性是基于它们的依赖进行缓存的,只有当依赖项发生变化时才会重新计算。 #### 12.2.3 侦听器与副作用 在Vue 3中,侦听器通过`watch`和`watchEffect`函数实现,它们在`setup()`函数中广泛使用来观察响应式数据的变化并执行副作用。 - **watch**:允许你侦听一个或多个响应式引用或getter函数,并在它们变化时执行回调函数。你可以选择是否深度侦听对象或数组内部的变化。 - **watchEffect**:在响应式数据变化时自动重新运行,不需要明确指定依赖项。它更适合于执行自动重新运行的副作用。 ```javascript import { ref, watch, watchEffect } from 'vue'; setup() { const count = ref(0); watchEffect(() => { console.log(`count is: ${count.value}`); }); watch(count, (newValue, oldValue) => { console.log(`count changed from ${oldValue} to ${newValue}`); }, { immediate: true, deep: false }); return { count }; } ``` #### 12.2.4 生命周期钩子 虽然`setup()`函数替代了Vue 2中的`beforeCreate`和`created`生命周期钩子,但你仍然可以在`setup()`函数内部通过`onMounted`、`onUpdated`等Composition API提供的生命周期钩子来访问组件的生命周期。 ```javascript import { onMounted, onUpdated, ref } from 'vue'; setup() { const count = ref(0); onMounted(() => { console.log('Component is mounted!'); }); onUpdated(() => { console.log('Component updated!'); }); return { count }; } ``` #### 12.2.5 组件通信 在`setup()`函数中,组件间的通信主要通过`props`、`emit`以及`provide`/`inject`实现。前面已经展示了如何使用`props`和`emit`,这里简要介绍`provide`/`inject`。 - **provide**:允许你指定你想要提供给后代组件的数据/方法。 - **inject**:允许一个组件接收来自祖先组件或整个应用的数据/方法。 ```javascript // 祖先组件 setup() { const theme = ref('dark'); provide('theme', theme); return {}; } // 后代组件 setup() { const theme = inject('theme'); return { theme }; } ``` #### 12.2.6 总结 `setup()`函数作为Vue 3中Composition API的核心,为开发者提供了一种全新的、更灵活的方式来组织和复用Vue组件的逻辑。通过`setup()`函数,我们可以更方便地利用响应式引用、计算属性、侦听器、生命周期钩子和组件通信等特性,从而编写出更加清晰、高效和可维护的Vue组件。掌握`setup()`函数及其相关API的使用,是深入学习Vue 3和Composition API的关键。
上一篇:
12.1 什么是组合API
下一篇:
12.3 响应式API
该分类下的相关小册推荐:
TypeScript和Vue从入门到精通(五)
Vue.js从入门到精通(四)
Vue3技术解密
TypeScript和Vue从入门到精通(一)
vue项目构建基础入门与实战
Vue.js从入门到精通(一)
移动端开发指南
Vue原理与源码解析
TypeScript和Vue从入门到精通(二)
Vue面试指南
TypeScript和Vue从入门到精通(三)
Vue.js从入门到精通(二)