Chào mừng độc giả của Cafedev đến với bài chia sẻ mới! Trong chủ đề này, chúng ta sẽ khám phá về Vuejs với Single-File Components (SFC), một phương pháp phát triển Vue hiệu quả và tiện lợi. SFC là một phần không thể thiếu trong quá trình phát triển ứng dụng Vue, giúp tăng cường sự tổ chức và quản lý mã nguồn. Hãy cùng tìm hiểu sâu hơn về cách sử dụng và lợi ích của Single-File Components trong phát triển ứng dụng Vuejs.

1. Giới Thiệu

Các Thành Phần Đơn Tệp của Vue (được gọi là tệp *.vue, viết tắt là SFC) là một định dạng tệp đặc biệt cho phép chúng ta đóng gói mẫu, logic, kiểu dáng của một thành phần Vue trong một tệp duy nhất. Dưới đây là một ví dụ về SFC:

Ví dụ theo 2 kiểu options vs composition:

<script>
export default {
  data() {
    return {
      greeting: 'Hello World!'
    }
  }
}
</script>

  <p class="greeting">{{ greeting }}</p>

<style>
.greeting {
  color: red;
  font-weight: bold;
}
</style>
<script setup>
import { ref } from 'vue'
const greeting = ref('Hello World!')
</script>

  <p class="greeting">{{ greeting }}</p>

<style>
.greeting {
  color: red;
  font-weight: bold;
}
</style>

2. Tại Sao SFC

Mặc dù SFC đòi hỏi bước biên dịch, nhưng lại mang lại nhiều lợi ích:
– Tạo các thành phần có cấu trúc sử dụng cú pháp HTML, CSS và JavaScript quen thuộc
Sự đồng bộ hóa của các vấn đề kết hợp về bản chất
– Mẫu được biên dịch trước mà không tốn chi phí biên dịch khi chạy
CSS có phạm vi trong thành phần
Cú pháp thuận tiện hơn khi làm việc với Composition API
– Các tối ưu hóa thời gian biên dịch bằng cách phân tích chéo mẫu và kịch bản
Hỗ trợ IDE với tự động hoàn thành và kiểm tra kiểu cho các biểu thức mẫu
– Hỗ trợ Hot-Module Replacement (HMR) ngay từ đầu

SFC là một tính năng quan trọng của Vue như một framework, và là phương pháp được khuyến nghị cho việc sử dụng Vue trong các tình huống sau đây:


– Ứng Dụng Một Trang (SPA)
– Tạo Trang Tĩnh (SSG)
– Bất kỳ giao diện người dùng không đơn giản nào mà bước biên dịch có thể được bào chế để cải thiện trải nghiệm phát triển (DX).

Tuy nhiên, chúng tôi nhận ra có những tình huống mà SFC có thể cảm thấy quá mức. Đó là lý do tại sao Vue vẫn có thể được sử dụng thông qua JavaScript thuần mà không cần bước biên dịch. Nếu bạn chỉ muốn tăng cường HTML lớn gần như tĩnh với tương tác nhẹ, bạn cũng có thể xem qua

petite-vue, một phần con của Vue được tối ưu hóa cho việc cải thiện dần.

3. Nó Hoạt Động như Thế Nào

SFC của Vue là một định dạng tệp đặc biệt cho framework và phải được biên dịch trước bởi @vue/compiler-sfc thành JavaScript và CSS chuẩn. Một SFC đã biên dịch là một module JavaScript (ES) chuẩn – điều này có nghĩa là với cài đặt biên dịch đúng bạn có thể nhập một SFC như một module:

import MyComponent from './MyComponent.vue'

export default {
  components: {
    MyComponent
  }
}

Các thẻ <style> bên trong các SFC thường được chèn dưới dạng thẻ <style> nguyên bản trong quá trình phát triển để hỗ trợ cập nhật nhanh. Đối với sản xuất, chúng có thể được trích xuất và hợp nhất vào một tệp CSS duy nhất.

Bạn có thể thử nghiệm với SFCs và khám phá cách chúng được biên dịch trong Vue SFC Playground.

Trong các dự án thực tế, chúng ta thường tích hợp trình biên dịch SFC với các công cụ xây dựng như Vite hoặc Vue CLI (dựa trên webpack), và Vue cung cấp các công cụ lập mẫu chính thức để bạn có thể bắt đầu với SFCs càng nhanh càng tốt. Xem thêm chi tiết trong phần Công cụ Lập trình SFC.

4. Còn vấn đề tách biệt thì sao?

Một số người dùng đến từ nền tảng phát triển web truyền thống có thể lo ngại rằng SFCs đang kết hợp các quan tâm khác nhau trong cùng một nơi – nơi mà HTML/CSS/JS được giả định phải phân tách!

Để trả lời câu hỏi này, quan trọng là chúng ta đồng ý rằng việc tách biệt vấn đề không tương đương với việc tách biệt các loại tệp. Mục tiêu cuối cùng của các nguyên tắc kỹ thuật là cải thiện tính bảo trì của các cơ sở mã. Tách biệt vấn đề, khi được áp dụng một cách cứng nhắc như việc tách biệt các loại tệp, không giúp chúng ta đạt được mục tiêu đó trong ngữ cảnh của các ứng dụng frontend ngày càng phức tạp.

Trong phát triển giao diện người dùng hiện đại, chúng tôi đã thấy rằng thay vì chia cơ sở mã thành ba lớp lớn mà lẫn vào nhau, việc chia chúng thành các thành phần không ràng buộc và kết hợp chúng là một cách tiếp cận hợp lý hơn. Bên trong một thành phần, mẫu của nó, logic, và kiểu dáng được tự nhiên kết hợp, và việc đặt chúng cùng nhau thực sự làm cho thành phần đó càng gắn kết và bảo trì hơn.

Lưu ý rằng ngay cả khi bạn không thích ý tưởng của Single-File Components, bạn vẫn có thể tận dụng các tính năng nạp nóng và tiền biên dịch của nó bằng cách tách JavaScript và CSS của bạn thành các tệp riêng biệt bằng Cú pháp Nhập nguồn.

Đó là một hành trình thú vị với Vuejs và Single-File Components, mà chúng tôi hy vọng bạn đã tận hưởng và học hỏi nhiều điều bổ ích từ bài chia sẻ này. Với sự phát triển không ngừng của Cộng đồng Cafedev, chúng ta có thể mong đợi nhiều điều mới mẻ và hấp dẫn trong tương lai. Hãy tiếp tục khám phá và chia sẻ kiến thức của bạn với cộng đồng để tạo nên một môi trường học tập và phát triển chuyên nghiệp. Cảm ơn bạn đã đồng hành cùng chúng tôi!

Tham khảo thêm: MIỄN PHÍ 100% | Series tự học Vuejs từ cơ bản tới nâng cao

Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của CafeDev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!