Bài học hiện đang bằng tiếng Séc. Giao diện đã được dịch – nội dung bài học sẽ sớm có.

← Cấp 3 – Bậc thầy

Bài 6 / 10 ⏱ 90 phút Premium

Tái thiết lớn: website của bạn bằng React

Viết lại website Cấp 1 bằng React. Cùng website, lần thứ ba – lần này như pro.

Nhiệm vụ

Lấy website từ Cấp 1–2 và xây lại bằng React. Nghe như lùi bước? Không – đây là luyện tập hay nhất: nội dung và thiết kế đã xong, bạn tập trung kỹ thuật mới. Cuối cùng bạn thấy rõ vì sao pro thấy đáng.

Kế hoạch tái thiết

  1. Chia website thành component. Lấy giấy bút (thật đấy!) và phác website thành hộp: Header, Gallery, Quiz, Footer… Mỗi hộp = một file trong src/.

  2. Chuyển HTML vào component. Copy từng mảnh từ file .html cũ sang JSX. Chú ý khác biệt quen: classclassName, mỗi component trả về một phần tử bọc. Copy ảnh vào thư mục public/ trong dự án Vite – đường dẫn như /images/team.jpg giữ nguyên.

  3. Chuyển CSS. Copy style.css vào src/App.css. Gần như không đổi – CSS vẫn là CSS.

  4. Tách dữ liệu thành mảng. Thẻ, kết quả, ảnh thư viện – cái nào lặp, thành mảng object + .map(), như bài component.

  5. Viết lại phép Cấp 2 thành state. Bảng chuyển đổi:

    Cấp 2 (JavaScript thuần)React
    getElementById + textContentstate + {value} trong JSX
    addEventListener("click", ...)onClick={...}
    classList.toggle + CSS .hiddenstate boolean + {condition && (...)}
    bộ đếm với biếnuseState với số

Xem này: chế độ tối kiểu React

Cùng viết lại một phép để thấy chuyển đổi:

import { useState } from 'react';
import Header from './Header.jsx';
import Gallery from './Gallery.jsx';

function App() {
  const [dark, setDark] = useState(
    localStorage.getItem("mode") === "dark"
  );

  function toggleMode() {
    const newMode = !dark;
    setDark(newMode);
    localStorage.setItem("mode", newMode ? "dark" : "light");
  }

  return (
    <div className={dark ? "dark" : ""}>
      <Header onToggle={toggleMode} dark={dark} />
      <Gallery />
    </div>
  );
}

export default App;

Và trong Header.jsx, nút nhận function qua prop:

function Header({ onToggle, dark }) {
  return (
    <header>
      <h1>My website</h1>
      <button onClick={onToggle}>{dark ? "☀️" : "🌙"}</button>
    </header>
  );
}

Một thứ mới cuối: prop cũng có thể là function. App giữ state và cho con nút bật/tắt. Gọi là “state ở trên cùng,” pattern phổ biến nhất trong React.

Checklist tái thiết

💡

Kẹt là bình thường. Bài này là marathon, không phải chạy nước rút – chia vài ngày cũng được. Khi kẹt: console (F12), lỗi từ Vite, so với ví dụ bài trước. Pro debug y hệt vậy.

Tự kiểm tra: Website chạy localhost và trông (gần) như trước – nhưng bên trong là component, dữ liệu và state. Thử thêm một thẻ vào mảng dữ liệu và xem ít việc thế nào. Đó là lý do React tồn tại.

Điều cần nhớ từ bài học này