Skip to content

components.vue

文件信息

  • 📄 原文件:02_components.vue
  • 🔤 语言:vue

组件基础知识 【单文件组件 (SFC)】 .vue 文件包含三个部分:

  • <template>: HTML 模板
  • <script>: JavaScript 逻辑
  • <style>: CSS 样式 【script setup】 Vue 3.2+ 推荐的语法:
  • 顶层绑定自动暴露给模板
  • 更简洁的代码
  • 更好的运行时性能

完整代码

vue
<!--
============================================================
                    Vue 3 组件基础
============================================================
组件是 Vue 应用的基本构建块。
通过组件可以将 UI 拆分为独立、可复用的部分。
============================================================
-->

<template>
    <div class="tutorial">
        <h1>Vue 3 组件教程</h1>

        <!-- 使用子组件 -->
        <UserCard
            :user="currentUser"
            :show-email="true"
            @update="handleUserUpdate"
            @delete="handleUserDelete"
        >
            <!-- 插槽内容 -->
            <template #actions>
                <button>自定义操作</button>
            </template>
        </UserCard>

        <!-- 列表渲染组件 -->
        <UserCard
            v-for="user in users"
            :key="user.id"
            :user="user"
            @update="handleUserUpdate"
        />
    </div>
</template>

<script setup>
/**
 * ============================================================
 *                    组件基础知识
 * ============================================================
 *
 * 【单文件组件 (SFC)】
 * .vue 文件包含三个部分:
 * - <template>: HTML 模板
 * - <script>: JavaScript 逻辑
 * - <style>: CSS 样式
 *
 * 【script setup】
 * Vue 3.2+ 推荐的语法:
 * - 顶层绑定自动暴露给模板
 * - 更简洁的代码
 * - 更好的运行时性能
 * ============================================================
 */

import { ref, reactive } from 'vue';

// 导入子组件(自动注册)
import UserCard from './UserCard.vue';

// 响应式数据
const currentUser = ref({
    id: 1,
    name: 'Alice',
    email: 'alice@example.com',
    avatar: '/avatars/alice.png',
});

const users = ref([
    { id: 1, name: 'Alice', email: 'alice@example.com' },
    { id: 2, name: 'Bob', email: 'bob@example.com' },
    { id: 3, name: 'Charlie', email: 'charlie@example.com' },
]);

// 事件处理
function handleUserUpdate(user) {
    console.log('更新用户:', user);
}

function handleUserDelete(userId) {
    console.log('删除用户:', userId);
    users.value = users.value.filter(u => u.id !== userId);
}
</script>

💬 讨论

使用 GitHub 账号登录后即可参与讨论

基于 MIT 许可发布