在Vue 3中,<script setup> 和普通的 <script> 标签都用于包含组件的JavaScript逻辑,但它们有一些关键区别。
<script setup>
- Simpler Syntax:
<script setup>使用更简单、更精炼的语法,专门用于 Composition API。 - Optimized: 因为它专为 Composition API 设计,所以它更加优化。
- Implicit Return: 在
<script setup>内定义的ref和reactive会自动暴露给模板,不需要特别声明。 defineProps和defineEmits: 使用特殊的函数来定义props和emits,而不是props和emits选项。
<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>
<script>
- Options API: 用于 Vue 2 的 Options API。
- Explicit Return: 使用
return在setup函数中明确返回要暴露给模板的属性。 - Verbose: 相对于
<script setup>,需要编写更多的代码。
<script>
import { ref } from 'vue'
export default {
setup() {
const count = ref(0)
return {
count
}
}
}
</script>
结合使用
在一些特殊情况下,你可能需要同时使用 <script setup> 和普通的 <script>。这主要用于类型定义或一些不能通过 <script setup> 完成的复杂操作。
<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>
<script>
// 用于类型定义或其它逻辑
</script>
请注意,一个组件不能同时拥有两个相同类型的 <script> 标签,但 <script setup> 和普通的 <script> 可以共存。
以上就是两者的主要区别和用法。根据你的具体需要,你可以选择其中一个或同时使用两者。