让我们一起走向未来
🎓作者简介:全栈领域优质创作者
🌐个人主页:百锦再@新空间代码工作室
💡座右铭:坚持自己的坚持,不要迷失自己!要快乐
目录
- 让我们一起走向未来
- 1. `<script setup>` 简介
- 2. **响应式数据**
- 3. **计算属性**
- 4. **方法**
- 5. **生命周期钩子**
- 6. **组件 props**
- 7. **组件 emits**
- 8. **类型推导支持(TypeScript)**
- 5. 与普通 `setup` 的区别
- 6. 使用场景
- 7. 总结
在 Vue 3 中,<script setup>
是一种全新的、简化的语法,用于编写组件的逻辑。它是 Vue 3 引入的 组合式 API(Composition API)的扩展,能够更简洁、直观地组织组件的响应式状态、方法、计算属性等,同时也能减少样板代码。它让开发者能在 Vue 单文件组件中更高效地使用 setup
函数的功能。
1. <script setup>
简介
#### 解释:
- **`<script setup>`** 标签直接包含组件逻辑,无需显式声明 `setup()`。
- **`import`**:你可以在 `<script setup>` 中导入依赖库或模块。
- **响应式数据**:直接使用 `ref`、`reactive` 等 API 来定义响应式数据,所有在 `<script setup>` 中定义的变量会自动暴露到模板中。
- **方法和计算属性**:方法、计算属性也可以直接定义,不需要返回。
### 4. 特性和用法
#### 1. **导入和暴露变量**
在 `<script setup>` 中定义的所有变量都会自动暴露到模板中,无需手动返回。
```vue
<script setup>
import { ref } from 'vue';
const count = ref(0); // 自动暴露到模板
</script>
2. 响应式数据
使用 ref
或 reactive
来声明响应式数据,它们会自动暴露到模板。
<script setup>
import { ref } from 'vue';
const count = ref(0);
const increment = () => {
count.value++;
};
</script>
3. 计算属性
使用 computed
来定义计算属性,它们也会自动暴露到模板。
<script setup>
import { ref, computed } from 'vue';
const num1 = ref(2);
const num2 = ref(3);
const sum = computed(() => num1.value + num2.value);
</script>
4. 方法
方法可以直接在 <script setup>
中定义,无需显式的 methods
属性。
<script setup>
import { ref } from 'vue';
const message = ref('Hello');
const changeMessage = () => {
message.value = 'Hello, World!';
};
</script>
5. 生命周期钩子
Vue 3 的生命周期钩子(如 onMounted
、onUpdated
、onUnmounted
等)可以直接在 <script setup>
中使用。
<script setup>
import { onMounted } from 'vue';
onMounted(() => {
console.log('Component mounted!');
});
</script>
6. 组件 props
使用 defineProps
来定义组件的 props。defineProps
是 Vue 3 引入的一个全局 API,专门用于在 <script setup>
中定义 props。
<script setup>
defineProps({
message: String
});
</script>
7. 组件 emits
使用 defineEmits
来定义组件的事件(emits
)。
<script setup>
defineEmits(['update']); // 定义 update 事件
</script>
8. 类型推导支持(TypeScript)
#### 9. **defineExpose**
如果你需要显式地暴露一些属性或方法到父组件,可以使用 `defineExpose`。
```vue
<script setup>
import { ref } from 'vue';
const message = ref('Hello from child');
defineExpose({
message
});
</script>
5. 与普通 setup
的区别
特性 | 普通 |
|
定义方式 | 需要显式声明 | 无需显式声明,直接在 |
返回值 | 需要显式 | 不需要 |
性能优化 | 无特殊优化 | Vue 会在编译时优化,性能更高 |
样板代码 | 需要 | 更简洁,自动管理 |
6. 使用场景
- 简洁组件逻辑:对于简单的组件,
<script setup>
是一个更简洁的选择,减少了冗余的代码。 - 大组件和复杂逻辑:当组件的逻辑较为复杂时,
<script setup>
仍然适用,但如果逻辑更复杂,可能需要将多个逻辑模块拆分到多个自定义函数中。 - TypeScript 项目:
<script setup>
完全支持 TypeScript,提供更好的类型推导和类型检查。
7. 总结
```
在上述示例中,我们创建了一个 Vue 实例,将其挂载到一个 div
元素上,并通过按钮点击事件改变 message
的值。每次点击按钮,页面上的文本会自动更新。
Vue 的易用性和灵活性使其成为开发现代 Web 应用程序的热门选择。