Class 02: ReactJS Component

Giới thiệu về Component trong React

Component là khối xây dựng cơ bản nhất trong React. Mỗi component đại diện cho một phần của giao diện người dùng (UI) và có thể được tái sử dụng ở nhiều nơi.

Trong Next.js App Router, component có thể được sử dụng trong các route như app/page.tsx hoặc trong các component UI tái sử dụng trong thư mục components.


Cách tạo Function Component bằng TypeScript

Cú pháp cơ bản

// app/components/Hello.tsx
'use client';

import React from 'react';

const Hello = () => {
  return <h1>Chào mừng đến với React + TypeScript + Next.js!</h1>;
};

export default Hello;

Lưu ý

  • Trong App Router, các file client-side cần có dòng 'use client' ở đầu file nếu sử dụng state, event, hoặc effect.

  • Tên component phải viết hoa chữ cái đầu (Hello), nếu không sẽ không được React hiểu là một component.

  • File có đuôi .tsx cho phép viết JSX kết hợp TypeScript.


Tạo Component có Props với TypeScript

Props là cách truyền dữ liệu vào component từ nơi sử dụng nó. Ta định nghĩa kiểu của props bằng type hoặc interface.

Ví dụ component nhận props

Cách sử dụng component có props


Truyền children cho Component

Một prop đặc biệt trong React là children, dùng để nhúng nội dung con vào component cha.

Ví dụ component layout dùng children

Cách sử dụng


Tái sử dụng Component qua danh sách .map()

Bạn có thể render nhiều component cùng loại với dữ liệu từ mảng.

Ví dụ hiển thị danh sách sản phẩm


Bài tập thực hành cho học viên

Bài tập 1: Tạo component ProfileCard

  • Nhận props: avatar: string, fullName: string, bio: string

  • Hiển thị ảnh đại diện, tên, mô tả ngắn gọn

  • Dùng CSS Module để căn chỉnh layout, bo tròn ảnh

Bài tập 2: Tạo component Button có thể tái sử dụng

  • Nhận props: onClick: () => void, label: string, variant: 'primary' | 'secondary'

  • Khi click thì console.log('Clicked!')


Tổng kết

  • Component là phần tử cơ bản nhất của UI trong React

  • Props là cách truyền dữ liệu vào component, nên dùng type để khai báo rõ ràng

  • children giúp truyền nội dung lồng vào trong component

  • CSS Module giúp style độc lập, dễ tái sử dụng

  • App Router yêu cầu 'use client' nếu dùng tương tác

Last updated