在Vue 3中,setup()
函数是Composition API的核心入口,其作用主要包括以下几个方面:
替代Vue 2的data
、methods
等选项:setup()
函数用于集中定义组件的响应式数据、方法、计算属性等,取代了Vue 2中分散的data
、methods
、computed
等选项。
逻辑组织更灵活:相关逻辑可以按功能组织在一起,而不是分散在不同选项中,提升代码可读性和复用性。
在组件初始化阶段执行:setup()
在组件实例创建之前运行(早于beforeCreate
和created
生命周期钩子),因此**无法访问this
**(此时实例未创建)。
接收两个参数:
props
:组件接收的响应式属性,不可直接解构(会失去响应性)。
context
:包含attrs
(非响应式属性)、slots
(插槽)、emit
(触发事件的方法)等上下文信息。
响应式数据:通过ref
(简单类型)或reactive
(对象)创建响应式变量。
import { ref, reactive } from 'vue'; setup() { const count = ref(0); const state = reactive({ name: 'Vue' }); return { count, state }; }
方法定义:直接声明函数并返回,供模板调用。
setup() { const increment = () => { count.value++; }; return { increment }; }
通过导入函数使用钩子:如onMounted
、onUpdated
等,替代Options API的生命周期选项。
import { onMounted } from 'vue'; setup() { onMounted(() => { console.log('组件已挂载'); }); }
覆盖beforeCreate
和created
:原本在这两个钩子中的代码应直接写入setup()
。
必须返回对象:setup()
返回的对象中的属性和方法会暴露给模板使用。
setup() { return { count, increment }; }
模板中直接访问:与Vue 2的data
和methods
类似,模板可直接使用返回的变量和方法。
自定义组合函数:将相关逻辑抽离为可复用的函数,利用setup()
整合到不同组件中。
javascript复制// 复用逻辑:鼠标跟踪 function useMousePosition() { const x = ref(0); const update = e => { x.value = e.pageX; }; onMounted(() => window.addEventListener('mousemove', update)); return { x }; } // 组件中使用 setup() { const { x } = useMousePosition(); return { x }; }
setup()
是Vue 3 Composition API的基石,它通过集中式的代码组织和函数式编程模式,解决了Vue 2中逻辑分散和复用困难的问题。其核心作用包括整合组件逻辑、声明响应式状态、访问组件上下文及生命周期管理,为构建复杂应用提供了更灵活和可维护的方案。