Chứa File CSS/global style (nếu dùng)
Chứa các UI component có thể tái sử dụng, được chia thành các nhóm logic nếu cần:
common/: các component nhỏ nhưButton,Modal,Input, v.v.featureX/: component gắn liền với một tính năng cụ thể nhưQuizCard,AnswerOption, v.v.
Các component nên được đặt tên theo PascalCase:
QuizCard.jsx,LoginForm.jsx
Chứa các custom React hooks dùng để tái sử dụng logic:
useDebounce.jsuseAuth.jsuseTimer.js
Tên hook bắt buộc bắt đầu bằng
use.
Chứa các component tương ứng với route/page chính của ứng dụng:
HomePage.jsxLoginPage.jsxQuizPage.jsx
Mỗi file trong đây tương ứng với một
<Route path="/...">.
Chứa các chức năng liên quan đến kết nối dữ liệu và nhà cung cấp trạng thái:
Chứa các hàm gọi API hoặc thiết lập axios:
quizAPI.jsauthAPI.jsaxiosInstance.js
Chứa các React Context Providers hoặc thư viện bên thứ ba được cấu hình (AuthProvider, ThemeProvider,...)
Chứa logic quản lý global state như Redux hoặc Zustand:
store.jsquizSlice.jsauthSlice.js
Chứa các hàm tiện ích không phụ thuộc vào React:
formatDate.jsshuffleArray.jsvalidateInput.js
Dùng để xử lý logic thuần JavaScript có thể tái sử dụng.
| Loại | Quy ước | Ví dụ |
|---|---|---|
| Folder | kebab-case |
quiz-page, user-form |
| Component file | PascalCase.jsx |
LoginForm.jsx |
| Hook file | camelCase.js |
useAuth.js, useTimer.js |
| API / Utils / Slice | camelCase.js |
quizAPI.js, quizSlice.js |
| CSS module | .module.css |
LoginForm.module.css |
Nếu bạn là thành viên mới, hãy tuân thủ cấu trúc này để giữ codebase sạch và dễ bảo trì.