Appearance
Vue 常见问题
1. 组合式 API (Composition API) 与选项式 API (Options API) 有什么区别?
核心区别在于代码的组织方式和逻辑复用能力:
选项式 API (Options API):
- 这是 Vue 2 的经典风格。
- 通过包含多个选项的对象(如
data,methods,mounted等)来描述组件逻辑。 - 特点:结构强制规范,易于新手上手,但在处理复杂逻辑时,相关功能的代码会被分散在不同的选项中,导致维护困难。
组合式 API (Composition API):
- Vue 3 引入的新风格(通常配合
<script setup>使用)。 - 通过导入的函数(如
ref,onMounted)来定义组件逻辑。 - 特点:允许将相关功能的代码组织在一起,不再受限于选项的分类。这使得代码更加灵活,且极大地增强了逻辑复用能力(通过自定义 Hook)。
- Vue 3 引入的新风格(通常配合
2. 组合式 API 与选项式 API 可以在同一个组件中使用吗?
可以。
Vue 3 允许在同一个组件中混合使用两种 API。
- 你可以在使用
data和methods的同时,使用setup()选项。 - 注意:选项式 API 可以访问组合式 API 暴露出的属性(通过
this),但组合式 API 的setup()中无法访问选项式 API 定义的属性(因为setup执行时机更早,且没有this)。 - 建议:在实际开发中,建议新项目优先统一使用组合式 API (
<script setup>),以保持代码风格一致。
3. 组合式 API 相比选项式 API 有什么优势?
更好的逻辑复用:
- 选项式 API 依靠 Mixins 复用逻辑,容易导致命名冲突和数据来源不清晰。
- 组合式 API 可以通过编写“组合式函数”(Composables)完美解决逻辑复用问题。
更灵活的代码组织:
- 在大型组件中,组合式 API 允许我们将处理同一个业务逻辑的代码(状态、方法、生命周期)放在一起,而不是分散在
data、methods等不同区块中。
- 在大型组件中,组合式 API 允许我们将处理同一个业务逻辑的代码(状态、方法、生命周期)放在一起,而不是分散在
更好的 TypeScript 支持:
- 组合式 API 大多使用普通的变量和函数,天然对类型推导更友好,不需要像选项式 API 那样做复杂的类型体操。
更小的生产包体积:
- 搭配
<script setup>使用时,编译后的代码更利于 minifier 进行压缩和 Tree-shaking。
- 搭配