Bài 3. React cơ bản: thành phần và JSX

React xây giao diện từ các component. Mỗi component là một hàm trả về JSX, nhận dữ liệu qua props.

40 phútCơ bản
Bạn sẽ học được
  • Viết component hàm với JSX
  • Truyền dữ liệu bằng props
  • Hiển thị danh sách bằng map và key
  • Hiển thị có điều kiện
Thuật ngữ cần biết
JSX
Cú pháp giống HTML viết trong JavaScript, được biên dịch thành lời gọi hàm.
Component
Hàm có tên viết hoa, trả về giao diện.
Props
Dữ liệu truyền từ component cha xuống con, chỉ đọc.
key
Mã định danh giúp React phân biệt các phần tử trong danh sách.

Component và JSX

function ChaoMung({ ten }) {
  return <h1 className="tieu-de">Xin chào, {ten}!</h1>;
}

export default function App() {
  return (
    <main>
      <ChaoMung ten="Lan" />
      <ChaoMung ten="Minh" />
    </main>
  );
}

Khác HTML: dùng className thay class, đóng mọi thẻ, và chỉ trả về một phần tử gốc (hoặc dùng <>...</>).

Danh sách và key

const khoa = [
  { id: 1, ten: "Python", gia: 0 },
  { id: 2, ten: "React", gia: 199000 }
];

function DanhSach() {
  return (
    <ul>
      {khoa.map(k => (
        <li key={k.id}>{k.ten} - {k.gia === 0 ? "Miễn phí" : k.gia.toLocaleString("vi-VN") + " đ"}</li>
      ))}
    </ul>
  );
}

Hiển thị có điều kiện

function TrangThai({ online }) {
  return <p>{online ? "Đang trực tuyến" : "Ngoại tuyến"}</p>;
}
// hoặc: {co_loi && <p className="loi">Có lỗi</p>}

Tách component

function The({ khoa }) {
  return (
    <article className="the">
      <h3>{khoa.ten}</h3>
      <p>{khoa.mo_ta}</p>
    </article>
  );
}
// Dùng: khoa.map(k => <The key={k.id} khoa={k} />)
Tình huống: Danh sách khóa học

Trang web trung tâm có 12 khóa học. Viết một component The rồi lặp bằng map; thêm khóa mới chỉ cần thêm một phần tử vào mảng dữ liệu.

Mẹo hay

Một component nên nhỏ và làm một việc. Nếu hàm dài trên 100 dòng, hãy tách ra.

Lưu ý

Không dùng chỉ số mảng làm key khi danh sách có thể thêm/xóa/sắp xếp; hãy dùng id ổn định.

Thực hành
  1. Viết component NutBam nhận props nhãn và màu.
  2. Hiển thị danh sách 5 món ăn bằng map.
  3. Làm component The có ảnh, tiêu đề, mô tả.
Tóm tắt bài học
  • Component là hàm viết hoa trả về JSX.
  • Props truyền xuống, chỉ đọc.
  • Danh sách dùng map và key.