Công cụ AI Coding

Build frontend React/TypeScript với Claude Code: hướng dẫn thực chiến (2026)

Aug 14, 202613 phút đọc

Có, bạn build được frontend React với Claude Code end-to-end - từ setup dự án, sinh component TypeScript, xử lý state/data, style theo design system, viết test, cho tới tối ưu performance. Claude Code là CLI agentic đọc được cả repo, sửa nhiều file và tự chạy dev/test rồi lặp, nên hợp React/TS. Quy trình 6 bước:

  • Cài Claude Code + tạo app Vite React-TS
  • Viết CLAUDE.md chốt stack và quy ước
  • Sinh component từ prompt có ràng buộc rõ, xem diff trước khi accept
  • Thêm data/state bằng TanStack Query + Router
  • Viết test (Vitest + RTL) và fix accessibility
  • Tối ưu lazy load, memo, tách bundle

Claude Code build được frontend React/TS không?

Có - Claude Code build được frontend React/TypeScript hoàn chỉnh, từ component lẻ tới cả tính năng có test và tối ưu. Đây là câu trả lời ngắn cho ai đang cân nhắc. Nhưng để hiểu vì sao nó làm được tốt hơn một chatbot dán code, cần biết Claude Code khác gì.

Claude Code là một CLI agentic: thay vì trả về đoạn code rời để bạn tự copy, nó đọc trực tiếp cây thư mục dự án, mở nhiều file cùng lúc, sửa chúng theo yêu cầu, rồi chạy lệnh (dev server, test, typecheck) và đọc output để tự sửa tiếp. Vòng lặp "đọc repo → sửa → chạy → xem lỗi → sửa lại" đúng là thứ khiến nó hợp React/TS, bởi một dự án frontend thật luôn có nhiều mảnh liên quan: một component mới cần type ở file khác, cần import đúng, cần khớp với theme và với test hiện có. Một mô hình chỉ nhìn một đoạn prompt sẽ không thấy các ràng buộc đó; Claude Code thì thấy vì nó có context cả project.

Thực tế, nó mạnh nhất khi bạn để nó tự chạy typecheck và test sau mỗi thay đổi - sai type hay import hỏng sẽ lộ ngay trong cùng phiên, thay vì để bạn phát hiện lúc build. Nếu bạn hoàn toàn mới, đọc trước Claude Code là gì và hoạt động ra sao để nắm mô hình agentic trước khi bắt tay.

Chuẩn bị: cài Claude Code + khởi tạo dự án React/TS

Ba việc trước khi viết dòng prompt đầu tiên: cài Claude Code, dựng khung React-TS, rồi khởi động Claude Code ngay trong thư mục dự án.

  1. Cài Claude Code. Xem hướng dẫn chi tiết theo hệ điều hành ở bài cách cài đặt Claude Code. Sau khi cài, chạy claude --version để chắc chắn CLI đã sẵn sàng.
  2. Tạo app Vite + React + TypeScript. Vite là lựa chọn mặc định gọn nhẹ cho SPA React:
npm create vite@latest my-app -- --template react-ts
cd my-app
npm install
npm run dev

Lệnh trên dựng sẵn cấu trúc src/, cấu hình TypeScript và một dev server chạy tại localhost:5173. Nếu bạn nhắm Next.js thay vì SPA, xem mục FAQ cuối bài.

  1. Mở Claude Code trong repo. Đứng ở thư mục gốc dự án và gõ:
claude

Claude Code sẽ nhận diện đây là dự án React-TS qua package.jsontsconfig.json. Từ đây bạn ra lệnh bằng ngôn ngữ tự nhiên. Mẹo nhỏ: trước khi giao việc, hỏi nó Đọc cấu trúc src/ và tóm tắt stack đang dùng để xác nhận nó "hiểu" đúng dự án.

Cấu hình CLAUDE.md cho dự án React/TS

Đây là bước 2/3 đối thủ bỏ qua, nhưng nó quyết định chất lượng mọi thứ sau đó. CLAUDE.md là file Claude Code tự đọc mỗi phiên - coi như bản "quy ước dự án" bạn viết một lần để không phải nhắc lại stack và convention trong từng prompt. Với frontend, một template thực dụng trông như sau:

# CLAUDE.md - Dự án React/TS

## Stack
- Vite + React 19 + TypeScript (strict mode)
- Styling: Tailwind CSS (hoặc MUI v7 - chọn 1, không trộn)
- Data: TanStack Query; Routing: TanStack Router
- Test: Vitest + React Testing Library

## Quy ước code
- Chỉ functional component + hooks. Không class component.
- TypeScript strict: KHÔNG dùng `any`. Nếu chưa rõ type, hỏi trước.
- Import tuyệt đối qua alias `@/` (đã cấu hình trong tsconfig).
- Mỗi component có type props tường minh (interface `XxxProps`).
- Component phức tạp phải có test đi kèm.

## Quy trình
- Trước khi sửa nhiều file, nêu kế hoạch ngắn để mình duyệt.
- Sau mỗi thay đổi: chạy `npm run typecheck` và test liên quan.
- Không tự cài thêm dependency nếu chưa hỏi.

Vài dòng đắt giá nhất: "không dùng any", "import tuyệt đối", và "chạy typecheck sau mỗi thay đổi". Chúng ngăn đúng những lỗi Claude Code hay mắc khi thiếu ràng buộc. Muốn hiểu sâu cách viết file này, xem hướng dẫn CLAUDE.md đầy đủ. Điểm cốt lõi cho frontend: càng chốt rõ stack và "review diff trước khi accept", output càng khớp phong cách dự án thay vì mỗi lần một kiểu.

Sinh component React/TS đầu tiên (walkthrough thật)

Đây là phần lõi. Cách bạn viết prompt quyết định 80% kết quả. Một prompt tốt nêu stack + ràng buộc + trạng thái cần xử lý, không chỉ nêu mục tiêu. So sánh:

  • Prompt yếu: "Tạo một component UserCard." → Claude Code phải đoán props, đoán style, có thể tự thêm thư viện.
  • Prompt tốt: "Tạo component UserCard trong src/components/. Props typed: user (id, name, avatarUrl, role), isLoading, error. Khi loading hiện skeleton; khi error hiện thông báo; style bằng Tailwind theo theme hiện có. Thêm file test cơ bản. Không thêm dependency mới."

Với prompt thứ hai, Claude Code thường tạo cùng lúc: UserCard.tsx, interface props, ba nhánh render (loading/error/data), và UserCard.test.tsx. Ví dụ interface nó sinh ra:

interface User {
 id: string;
 name: string;
 avatarUrl: string;
 role: string;
}

interface UserCardProps {
 user?: User;
 isLoading?: boolean;
 error?: string | null;
}

Bước không được bỏ: xem diff trước khi accept. Claude Code hiển thị thay đổi từng file dạng diff. Đọc kỹ - chú ý import có tồn tại thật không, có tự ý đổi file khác không, type có bị nới lỏng thành any không. Chấp nhận từng phần bạn hài lòng, yêu cầu sửa phần còn lại (ví dụ: "tách phần skeleton ra component riêng"). Sau khi accept, để nó chạy npm run typecheck và test ngay trong phiên.

State, data fetching & routing

Với dự án React hiện đại 2026, đừng để Claude Code mặc định nhảy vào Redux. Pattern gọn hơn cho hầu hết trường hợp: hooks cho local state, TanStack Query cho server state, TanStack Router cho điều hướng, và chỉ dùng global state (Zustand/Context) khi thật sự có state chia sẻ chéo nhiều nhánh.

Prompt mẫu để sinh một hook fetch có sẵn loading/error qua Suspense:

Tạo hook `useUser(id)` dùng TanStack Query `useSuspenseQuery`
fetch từ /api/users/:id, trả về User đã typed.
Bọc UserCard trong <Suspense fallback> và một error boundary.
Không tự tạo state global.

useSuspenseQuery (TanStack Query v5) cho phép component "tạm dừng" render tới khi có dữ liệu, đẩy trạng thái loading lên <Suspense> cha thay vì rải if (isLoading) khắp nơi - code sạch hơn hẳn (xem TanStack Query docs, 2026). Nguyên tắc khi giao việc: nói rõ "server state dùng Query, đừng nhét vào global store", nếu không Claude Code dễ over-engineer bằng một store lớn không cần thiết.

Styling & responsive (design system, dark mode)

Claude Code style component khá nhanh, nhưng dễ hard-code màu và spacing nếu bạn không chặn. Cách ép nó bám design system: khai báo trong CLAUDE.md rằng chỉ dùng token/theme, rồi trong prompt yêu cầu cụ thể.

  • Bám token, không hard-code: "Dùng class Tailwind theo config hiện có (spacing, màu từ theme), không viết giá trị hex trực tiếp." Với MUI v7 thì: "style qua sx và theme, dùng theme.palette, không hard-code màu."
  • Responsive: nêu breakpoint mong muốn - "mobile 1 cột, ≥768px chuyển 2 cột."
  • Dark mode: yêu cầu dùng biến theme/class dark: có sẵn, không tạo cơ chế theme song song.

Một lần nữa, xem diff và kiểm tra nó có tự thêm thư viện UI mới không. Nếu bạn muốn đi sâu vào phần thẩm mỹ và trải nghiệm, bài thiết kế UI/UX với Claude Code tập trung riêng vào việc dựng giao diện đẹp và nhất quán.

Test & accessibility cho component

Đây là khoảng trống lớn của các bài đối thủ: họ nhắc test và a11y cho có. Nhưng đúng vòng đời một component gồm cả hai. Claude Code viết test khá tốt vì nó chạy được test và tự sửa tới khi xanh.

Test với Vitest + React Testing Library. Prompt hiệu quả nêu rõ các nhánh cần phủ:

Viết test cho UserCard bằng Vitest + React Testing Library:
- render trạng thái loading -> có skeleton
- render với user -> hiện name và role
- render với error -> hiện thông báo lỗi
Chạy test và sửa tới khi pass.

Ví dụ một case test nó sinh ra:

it('hiện thông báo khi có lỗi', () => {
 render(<UserCard error="Không tải được" />);
 expect(screen.getByText('Không tải được')).toBeInTheDocument();
});

Accessibility. Đây là điểm Claude Code hay quên nếu không được nhắc. Sau khi component chạy, giao thẳng: "Audit accessibility cho UserCard và fix: đảm bảo có role/aria phù hợp, ảnh avatar có alt, thao tác được bằng keyboard, tương phản màu đủ." Nó sẽ thêm alt, gắn aria-label/role đúng chỗ và chỉnh focus. Vẫn nên kiểm chứng bằng cách tab qua component thật - a11y là thứ dễ "tưởng đúng".

Tối ưu performance (lazy load, memo, bundle)

Khi app lớn dần, nhờ Claude Code tối ưu - nhưng có chủ đích, không tối ưu sớm.

  • Code splitting theo route: React.lazy + <Suspense> để tách bundle theo trang, chỉ tải khi cần (xem React docs - lazy, 2026). Prompt: "Chuyển các route sang React.lazy + Suspense để tách bundle."
  • Memo hóa đúng chỗ: useMemo cho tính toán nặng, memo cho component render lại nhiều với props ổn định. Đừng bọc mọi thứ - memo bừa còn tốn hơn.
  • Phát hiện re-render thừa: "Tìm các re-render không cần thiết trong <danh sách component> và đề xuất cách sửa." Claude Code đọc được cả cây component nên chỉ ra được nguồn gốc, không chỉ đoán.

Cảnh báo thẳng: tối ưu quá sớm làm code khó đọc mà chưa chắc nhanh hơn. Chỉ tối ưu khi đã đo (bundle size, React DevTools Profiler) và có vấn đề thật.

Tăng tốc bằng skill frontend dựng sẵn (AgentKit)

Viết lại CLAUDE.md, chốt quy ước React/TS, nhắc "dùng Suspense", "bám theme"... cho mỗi dự án mới khá tốn công. Có một cách rút gọn: dùng skill frontend dựng sẵn. Cụ thể, skill ak-frontend-development trong AgentKit đóng gói sẵn các pattern React/TS hiện đại - functional component, React.lazy/Suspense, useSuspenseQuery, MUI v7, TanStack Router - để Claude Code áp dụng ngay mà bạn không phải mô tả lại từng lần.

Làm rõ để tránh nhầm: AgentKit ở đây là bộ kit cho Claude Code (agentkit.best, CLI ak) - không phải "OpenAI AgentKit". Muốn nắm tổng quan trước, xem AgentKit là gì và có đáng dùng không. Nếu bạn chưa quen khái niệm skill, đọc skill trong Claude Code là gì. Skill ak-frontend-development nằm trong Engineer Kit; chi tiết trọn bộ có ở bài Engineer Kit review (có skill ak-frontend-development).

Muốn Claude Code build React theo pattern chuẩn ngay từ đầu? Engineer Kit ($99, trang không nêu phí định kỳ) gói sẵn 60+ skill gồm ak-frontend-development, kèm money-back guarantee và cập nhật trọn đời - hợp nếu bạn dựng frontend thường xuyên và muốn bỏ bước cấu hình lặp lại.

Xem skill frontend của AgentKit →

Khi nào Claude Code build React dở? Lỗi thường gặp

Trung thực là điều đối thủ né. Claude Code không hoàn hảo - biết trước điểm yếu giúp bạn phòng đúng chỗ.

  • Hallucinate import / sai version thư viện. Nó có thể import từ package chưa cài, hoặc dùng API của phiên bản cũ (ví dụ pattern React Query v4 trong khi dự án dùng v5). Phòng: pin version trong CLAUDE.md, để nó chạy typecheck ngay - import hỏng lộ liền.
  • Over-engineer. Một form đơn giản có thể bị thêm cả state machine. Phòng: nêu rõ độ phức tạp mong muốn ("giữ đơn giản, không thêm thư viện").
  • Prop drilling. Truyền props qua nhiều tầng thay vì dùng context/composition. Phòng: yêu cầu review kiến trúc khi cây component sâu.
  • Quên accessibility. Như đã nói ở trên - mặc định dễ bỏ a11y nếu không nhắc.
  • Dùng API React lỗi thời. Đôi khi ra useEffect fetch data kiểu cũ thay vì Suspense/Query. Phòng: chốt pattern hiện đại trong CLAUDE.md.

Mẫu số chung của cách phòng: review diff + chạy test/typecheck ngay, đừng accept mù. Điều này cũng giúp bạn tránh "AI slop" - code chạy được nhưng lộn xộn, khó bảo trì.

Câu hỏi thường gặp (FAQ)

Claude Code có tự chạy npm run dev và test không?

Có. Claude Code chạy được lệnh terminal trong dự án - khởi động dev server, chạy test, typecheck - rồi đọc output để tự sửa. Bạn nên bật thói quen yêu cầu nó chạy test/typecheck sau mỗi thay đổi để bắt lỗi sớm.

Dùng cho Next.js được không hay chỉ Vite?

Được cả hai. Claude Code không phụ thuộc framework cụ thể; nó làm việc với Next.js, Vite, Remix hay React Native đều ổn miễn là dự án có cấu trúc rõ. Chỉ cần khai báo framework trong CLAUDE.md để nó dùng đúng convention (ví dụ App Router của Next.js).

Cần biết React trước khi dùng không?

Nên. Claude Code viết code nhanh nhưng bạn cần đủ kiến thức React/TS để đọc diff, phát hiện chỗ nó làm sai và ra ràng buộc đúng. Người mới hoàn toàn vẫn học được, nhưng đừng accept code mà không hiểu - đó là nguồn gốc của bug khó gỡ.

Dùng chung với Cursor hoặc VS Code được không?

Được. Claude Code là CLI, chạy song song với bất kỳ editor nào. Nhiều dev để Claude Code lo phần agentic (sinh/sửa nhiều file, chạy test) và vẫn mở VS Code để đọc và chỉnh tay. Hai công cụ bổ trợ nhau.

Làm sao tránh code lỗi thời hoặc sai version thư viện?

Pin version cụ thể trong CLAUDE.md, yêu cầu nó chạy typecheck ngay, và nêu rõ pattern hiện đại muốn dùng (Suspense, TanStack Query v5). Khi thấy nó dùng API cũ, chỉ ra và bảo nó cập nhật theo docs mới nhất.

Có skill dựng sẵn cho frontend không?

Có. Skill ak-frontend-development trong AgentKit (Engineer Kit, agentkit.best) gói sẵn pattern React/TS hiện đại để Claude Code áp dụng ngay, thay vì bạn phải cấu hình quy ước mỗi dự án. Đây là AgentKit cho Claude Code, khác OpenAI AgentKit.

Kết luận + bước tiếp theo

Quy trình gọn lại thành 6 bước lặp được: cài đặt + khởi tạo → viết CLAUDE.md → sinh component với prompt có ràng buộc và luôn xem diff → thêm state/data bằng TanStack Query/Router → test và fix a11y → tối ưu performance khi cần. Chìa khóa không phải "prompt dài" mà là ràng buộc rõ + review diff + chạy test ngay. Bước tiếp theo: xem thiết kế UI/UX với Claude Code để nâng phần giao diện, ghép phần build backend API với Claude Code cho ứng dụng full-stack, và chuẩn hóa git workflow với Claude Code khi commit các thay đổi. Chưa dựng xong môi trường thì quay lại cài đặt Claude Code. Nếu build frontend là việc hằng ngày, một bộ kit AgentKit (giảm 20% qua link) với skill dựng sẵn sẽ bỏ được kha khá bước cấu hình lặp lại.

J

Jasmine

Tác giả · Jasmine Daily

Người viết nên Jasmine Daily - ghi lại những suy nghĩ, trải nghiệm và những khoảnh khắc đời thường. Thật lòng, không vội vàng, không hoàn hảo.

Jasmine Daily

Vẫn còn nhiều điều đang chờ được đọc.

Nếu bài viết này chạm đến bạn, hãy ghé xem thêm vài trang khác trong cuốn nhật ký này.

Đọc tiếp

Bài viết liên quan