Alpine.js là gì? Hướng dẫn cơ bản

Mục lục

Ở bài trước, chúng ta đã “chia tay” jQuery. Nhưng câu hỏi đặt ra là: Nếu muốn làm một cái Dropdown menu, một cái Modal, hay một cái Tab chuyển đổi đơn giản thì dùng cái gì?

Dùng React hay Vue ư? Quá cồng kềnh! Cài đặt Webpack, Vite, Node_modules cả trăm MB chỉ để ẩn hiện một cái menu thì thật lãng phí. Dùng Vanilla JS (JS thuần)? Hơi dài dòng và khó quản lý state.

Chào mừng bạn đến với Alpine.js - Cứu tinh của lập trình viên Fullstack.

1. Alpine.js là gì?

Alpine.js là một Framework JavaScript siêu nhẹ (chỉ khoảng 7KB khi nén). Nó cho phép bạn viết logic JavaScript trực tiếp ngay trong thẻ HTML.

Hãy tưởng tượng:

2. Tại sao bạn nên học Alpine.js ngay hôm nay?

  1. Siêu nhẹ: Tải trang cực nhanh, Google PageSpeed rất thích điều này.
  2. Không cần cấu hình: Chỉ cần nhúng 1 link CDN là chạy.
  3. Cực hợp với Laravel: Alpine.js nằm trong bộ TALL Stack nổi tiếng (Tailwind - Alpine - Laravel - Livewire). Nếu bạn làm Laravel, Alpine là kỹ năng bắt buộc phải biết.
  4. Tư duy hiện đại: Giúp bạn làm quen với tư duy Reactive (Dữ liệu thay đổi -> Giao diện tự đổi) mà không cần học React/Vue quá sâu.

3. Cài đặt

Cách nhanh nhất là nhúng CDN vào thẻ <head> của file layout:

HTML
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
Nhấp để mở rộng và xem thêm

Xong! Bạn đã sẵn sàng để code.

4. Các câu lệnh (Directives) cốt lõi

Alpine.js xoay quanh các thuộc tính bắt đầu bằng x-. Dưới đây là 4 câu lệnh bạn sẽ dùng 90% thời gian.

4.1. x-data: Khai báo “Bộ não” (State)

Đây là nơi bạn khai báo dữ liệu. Mọi thứ trong thẻ div này sẽ truy cập được dữ liệu đó.

HTML
<div x-data="{ open: false }">
</div>
Nhấp để mở rộng và xem thêm

4.2. x-on (hoặc @): Bắt sự kiện

Dùng để lắng nghe click, hover, submit… (Giống v-on của Vue hay .on() của jQuery).

HTML
<button @click="open = true">Mở ra</button>
<button @click="open = false">Đóng lại</button>
Nhấp để mở rộng và xem thêm

Mẹo: Bạn có thể viết tắt x-on:click thành @click.

4.3. x-show: Ẩn/Hiện phần tử

Thay vì dùng .hide() hay .show() của jQuery, bạn chỉ cần ràng buộc nó với biến dữ liệu.

HTML
<div x-show="open">
    Nội dung này sẽ ẩn hiện tùy theo biến 'open'
</div>
Nhấp để mở rộng và xem thêm

4.4. x-model: Liên kết dữ liệu 2 chiều (Two-way binding)

Dùng cho các ô Input. Khi bạn gõ phím, biến dữ liệu cập nhật. Khi biến dữ liệu cập nhật, ô input thay đổi theo.

HTML
<div x-data="{ message: '' }">
    <input type="text" x-model="message" placeholder="Nhập tên bạn...">
    
    <p>Xin chào: <span x-text="message"></span></p>
</div>
Nhấp để mở rộng và xem thêm

5. Thực chiến: Làm Dropdown Menu trong 1 phút

Hãy so sánh cách làm của jQuery và Alpine để thấy sự khác biệt.

Cách cũ (jQuery)

Bạn phải đặt ID, rồi viết file JS riêng, rồi $(document).ready

JAVASCRIPT
// jQuery: Phải tách rời HTML và JS
$('#btn-toggle').click(function() {
    $('#menu-content').toggle();
});
Nhấp để mở rộng và xem thêm

Cách mới (Alpine.js)

Tất cả nằm gọn trong HTML. Dễ đọc, dễ hiểu.

HTML
<div x-data="{ open: false }" class="relative">
    <button @click="open = !open" class="btn-primary">
        Menu
    </button>

    <div x-show="open" 
         @click.outside="open = false" 
         class="dropdown-content">
        <a href="#">Cài đặt</a>
        <a href="#">Đăng xuất</a>
    </div>
</div>
Nhấp để mở rộng và xem thêm

Phân tích sự lợi hại:

  1. Không cần đặt id hay class để JS tìm kiếm (xóa bỏ gánh nặng đặt tên).
  2. Có sẵn @click.outside: Click ra ngoài tự đóng menu (Cái này làm bằng jQuery/JS thuần cực mệt).
  3. Code logic nằm ngay cạnh code giao diện -> Dễ bảo trì.

6. Kết hợp với Laravel Blade

Alpine cực kỳ mạnh khi kết hợp với Blade Template. Bạn có thể truyền dữ liệu từ Server (PHP) thẳng vào Alpine.

HTML
<div x-data="{ count: {{ $productCount }} }">
    <p>Giỏ hàng đang có: <span x-text="count"></span> sản phẩm</p>
    
    <button @click="count++">Thêm sản phẩm</button>
</div>
Nhấp để mở rộng và xem thêm

Tổng kết

Alpine.js là mảnh ghép hoàn hảo cho các dự án Web truyền thống (Multi-page Application). Nó lấp đầy khoảng trống giữa jQuery (quá cũ) và React/Vue (quá phức tạp cho các tác vụ nhỏ).

Nếu bạn là một Laravel Developer, lời khuyên chân thành của mình là: Hãy học Alpine.js ngay hôm nay. Nó sẽ giúp bạn code Frontend nhanh gấp đôi mà vẫn giữ được sự nhẹ nhàng cho website.

Bắt đầu tìm kiếm

Nhập từ khóa để tìm kiếm

↑↓
ESC
⌘K Phím tắt