Bài 11. Tailwind với React, Next.js, PHP và Laravel

Tailwind phát huy tối đa khi kết hợp với framework thành phần. Bài cuối hướng dẫn tích hợp Tailwind vào React (Vite), Next.js, trang PHP thuần và Laravel, cách tổ chức thành phần để tránh lặp lớp và gộp lớp có điều kiện.

50 phútNâng cao
Bạn sẽ học được
  • Dùng Tailwind trong component React
  • Cài Tailwind cho Next.js
  • Dùng Tailwind với PHP thuần và Laravel (Vite)
  • Gộp lớp có điều kiện với clsx, tailwind-merge

Một số khái niệm

Trong React, mỗi thành phần (Button, Card) chứa sẵn các lớp Tailwind và nhận props để chọn biến thể; mã HTML không còn dài vì bạn chỉ viết <Button variant="primary">. Với PHP, tương tự bằng hàm hoặc tệp include.

Thành phần React

// Button.jsx
import clsx from 'clsx';
const kieu = {
  primary: 'bg-green-600 text-white hover:bg-green-500',
  outline: 'ring-1 ring-slate-300 text-slate-800 hover:bg-slate-50',
  danger:  'bg-rose-600 text-white hover:bg-rose-500',
};
const co = { sm: 'px-3 py-1.5 text-sm', md: 'px-4 py-2', lg: 'px-6 py-3 text-lg' };

export default function Button({ variant = 'primary', size = 'md', className, ...props }) {
  return (
    <button
      className={clsx('rounded-lg font-semibold transition disabled:opacity-50', kieu[variant], co[size], className)}
      {...props}
    />
  );
}
// <Button variant="outline" size="sm">Hủy</Button>

Thư viện tailwind-merge (twMerge) gộp lớp xung đột, ví dụ twMerge("px-4", "px-6") → "px-6", hữu ích khi cho phép ghi đè className.

Next.js

npx create-next-app@latest du-an --tailwind --app
# đã cài sẵn tailwindcss và @tailwindcss/postcss, app/globals.css có:  @import "tailwindcss";

Chi tiết dựng ứng dụng xem loạt Next.js.

PHP thuần và Laravel

<?php // the-khoa-hoc.php: thành phần dùng lại
function the_khoa_hoc(string $ten, int $so_bai, string $link): string {
  $ten = htmlspecialchars($ten);
  return <<<HTML
  <a href="/$link" class="block rounded-xl bg-white p-4 shadow-sm ring-1 ring-slate-200 hover:ring-green-500">
    <h3 class="font-semibold">$ten</h3><p class="text-sm text-slate-500">$so_bai bài</p>
  </a>
  HTML;
}
foreach ($khoa_hoc as $k) echo the_khoa_hoc($k['ten'], $k['so_bai'], $k['link']);
# Laravel 11+ đã kèm Vite; cài Tailwind v4:
npm install tailwindcss @tailwindcss/vite
# vite.config.js thêm tailwindcss() vào plugins; resources/css/app.css:
#   @import "tailwindcss";
#   @source "../views";     (quét các tệp Blade)
# Blade: @vite('resources/css/app.css')

Với PHP thuần trên XAMPP, dùng Tailwind CLI (Bài 2) quét thư mục chứa tệp .php và xuất ra app.css.

Mẹo hay

Thư viện thành phần shadcn/ui (React) và Flowbite (HTML, React, Laravel) xây trên Tailwind, cho bạn thành phần đẹp có sẵn mà vẫn sửa được từng lớp.

Lưu ý

Khi viết lớp trong chuỗi PHP/JS, vẫn phải là tên lớp đầy đủ để Tailwind quét được; không ghép "text-" . $mau.

Thực hành
  1. Tạo component Button, Card trong React với các biến thể.
  2. Tạo dự án Next.js có Tailwind và dựng trang chủ.
  3. Dùng Tailwind CLI cho trang PHP danh sách sinh viên.
  4. Dùng clsx để đổi màu dòng theo trạng thái Đạt/Không đạt.
Tóm tắt bài học
  • Tách thành phần để không lặp lớp.
  • clsx, tailwind-merge gộp lớp có điều kiện.
  • Next.js: tạo dự án với --tailwind.
  • PHP/Laravel: CLI hoặc Vite, @source để quét tệp mẫu.