Khái niệm Component và cách sử dụng

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 12 tháng 3, 2025

Component là một trong những tính năng quan trọng nhất của Vue.js, giúp chia nhỏ giao diện thành các phần có thể tái sử dụng.

Mục tiêu bài học:

  • Hiểu Component là gì và tại sao cần sử dụng Component trong Vue.js.
  • Biết cách tạo và đăng ký Component (local và global).
  • Học cách truyền dữ liệu giữa các Component.
  • Thực hành: Xây dựng một Component hiển thị thông tin người dùng.

Component và cách sử dụng

1. Component là gì? Tại sao cần dùng Component?

  • Component là các khối UI nhỏ có thể tái sử dụng.
  • Lợi ích của Component:
    • Dễ quản lý code.
    • Tái sử dụng trong nhiều phần khác nhau của ứng dụng.
    • Dễ mở rộng và bảo trì.

Ví dụ: Trong một trang web có danh sách sản phẩm, mỗi sản phẩm có thể được tách thành một Component riêng biệt.

2. Cách tạo và đăng ký Component trong Vue.js

a) Cách tạo Component trong Vue.js

Component có thể được tạo bằng cách sử dụng app.component() hoặc khai báo trực tiếp trong components của Vue instance.

Ví dụ: Tạo Component đơn giản hiển thị tên người dùng

const UserInfo = {
  template: `<p>Xin chào, tôi là {{ name }}!</p>`,
  data() {
    return {
      name: "Nguyễn Văn A"
    };
  }
};

b) Cách đăng ký Component

Cách 1: Đăng ký Component toàn cục (Global Component)
Khi đăng ký toàn cục, Component có thể được sử dụng ở bất kỳ đâu trong ứng dụng.

const app = Vue.createApp({});
app.component("user-info", UserInfo);
app.mount("#app");

Sau khi đăng ký, có thể sử dụng <user-info></user-info> ở bất kỳ đâu.

Cách 2: Đăng ký Component cục bộ (Local Component)
Chỉ sử dụng Component trong một Component hoặc Vue instance cụ thể.

const app = Vue.createApp({
  components: {
    "user-info": UserInfo
  }
});
app.mount("#app");

Component này chỉ có thể sử dụng bên trong Vue instance chứa nó.

3. Truyền dữ liệu giữa các Component

a) Truyền dữ liệu từ Component cha xuống Component con (Props)

Ví dụ: Component cha truyền dữ liệu name cho Component con thông qua props.

Component con (UserInfo.vue)

const UserInfo = {
  props: ["name"],
  template: `<p>Xin chào, tôi là {{ name }}!</p>`
};

Component cha (App.vue)

const app = Vue.createApp({
  data() {
    return {
      userName: "Nguyễn Văn B"
    };
  },
  components: {
    "user-info": UserInfo
  },
  template: `<user-info :name="userName"></user-info>`
});
app.mount("#app");
  • Component cha truyền dữ liệu userName xuống Component con qua props.

Thực hành: Xây dựng Component hiển thị thông tin người dùng

Yêu cầu:

  • Tạo một Component UserInfo.vue hiển thị tên, email, avatar của người dùng.
  • Dữ liệu được truyền từ Component cha vào Component con thông qua props.

Bước 1: Cấu trúc thư mục

/project
  /index.html
  /main.js
  /UserInfo.vue

Bước 2: Tạo file index.html

<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Component trong Vue.js</title>
</head>
<body>
    <div id="app"></div>
    <script type="module" src="main.js"></script>
</body>
</html>

Bước 3: Tạo file UserInfo.vue

const UserInfo = {
  props: ["name", "email", "avatar"],
  template: `
    <div class="user-card">
      <img :src="avatar" alt="Avatar" class="avatar"/>
      <h2>{{ name }}</h2>
      <p>Email: {{ email }}</p>
    </div>
  `,
  data() {
    return {};
  }
};

Bước 4: Tạo file main.js

import { createApp } from "vue";
import UserInfo from "./UserInfo.vue";

const app = createApp({
  components: {
    "user-info": UserInfo
  },
  data() {
    return {
      user: {
        name: "Nguyễn Văn A",
        email: "nguyenvana@gmail.com",
        avatar: "https://via.placeholder.com/100"
      }
    };
  },
  template: `
    <div>
      <h1>Thông tin người dùng</h1>
      <user-info 
        :name="user.name" 
        :email="user.email" 
        :avatar="user.avatar"
      ></user-info>
    </div>
  `
});

app.mount("#app");

Kết quả:

  • Ứng dụng hiển thị tên, email, avatar của người dùng.
  • Dữ liệu được truyền từ Component cha xuống Component con bằng props.

Kết luận

Tóm tắt kiến thức quan trọng:

  • Component giúp chia nhỏ giao diện, làm cho code dễ quản lý và tái sử dụng.
  • Có thể đăng ký Component theo cách toàn cục hoặc cục bộ.
  • Sử dụng props để truyền dữ liệu từ Component cha xuống Component con.
  • Thực hành: Xây dựng Component hiển thị thông tin người dùng.
Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ