TopDev

Vue.js hoạt động theo nguyên lý nào? Giải mã cơ chế của Framework này

topdev 📖 4 phút đọc

Vue.js là một progressive framework JavaScript phổ biến được sử dụng để xây dựng giao diện người dùng (UI) và các ứng dụng đơn trang (SPA). Để hiểu rõ hơn về cách Vue.js hoạt động, chúng ta cần tìm hiểu các nguyên lý cốt lõi làm nền tảng cho sự mạnh mẽ và linh hoạt của nó.

  • Mô hình dữ liệu phản ứng (Reactivity System)

Một trong những nguyên lý quan trọng nhất của Vue.js là hệ thống phản ứng (reactivity system). Điều này có nghĩa là khi dữ liệu trong ứng dụng thay đổi, giao diện người dùng sẽ tự động được cập nhật mà không cần can thiệp thủ công. Vue.js đạt được điều này thông qua một số cơ chế:

  • Object.defineProperty() (Vue 2): Trong Vue 2, Vue sử dụng phương thức Object.defineProperty() để biến đổi các thuộc tính của đối tượng dữ liệu thành các getter/setter. Khi một thuộc tính được truy cập (getter), Vue sẽ theo dõi nó. Khi một thuộc tính được thay đổi (setter), Vue sẽ thông báo cho các thành phần (components) phụ thuộc để cập nhật lại.

  • Proxy (Vue 3): Với Vue 3, Vue chuyển sang sử dụng Proxy API của JavaScript. Proxy cung cấp một cách mạnh mẽ hơn và hiệu quả hơn để theo dõi các thay đổi của đối tượng, bao gồm cả việc thêm hoặc xóa thuộc tính mới, cũng như các thay đổi trong mảng. Điều này giúp loại bỏ một số hạn chế của Object.defineProperty().

  • Dependency Tracking: Khi một component render, Vue sẽ theo dõi những thuộc tính dữ liệu nào mà component đó phụ thuộc vào. Khi một thuộc tính dữ liệu thay đổi, Vue sẽ chỉ render lại những component thực sự bị ảnh hưởng, tối ưu hóa hiệu suất.

  • Virtual DOM (DOM ảo)


Vue.js sử dụng khái niệm Virtual DOM để tối ưu hóa việc cập nhật giao diện người dùng. Thay vì thao tác trực tiếp với DOM thật (là một quá trình tốn kém về hiệu suất), Vue.js thực hiện các bước sau:

  • Tạo Virtual DOM Tree: Khi dữ liệu thay đổi, Vue.js tạo một cây Virtual DOM mới, đại diện cho trạng thái mong muốn của giao diện người dùng.

  • So sánh (Diffing): Vue.js so sánh cây Virtual DOM mới với cây Virtual DOM cũ để tìm ra sự khác biệt (diff).

  • Cập nhật DOM thật: Chỉ những phần tử DOM thật bị thay đổi mới được cập nhật. Quá trình này được gọi là "patching". Bằng cách giảm thiểu số lượng thao tác trực tiếp trên DOM thật, Vue.js cải thiện đáng kể hiệu suất của ứng dụng, đặc biệt là với các ứng dụng có giao diện phức tạp và thường xuyên thay đổi.


    Component-Based Architecture (Kiến trúc dựa trên Component)#

    Vue.js khuyến khích kiến trúc dựa trên component, nơi giao diện người dùng được chia thành các component độc lập, có thể tái sử dụng. Mỗi component có thể có trạng thái (state) và logic riêng, và chúng giao tiếp với nhau thông qua props (truyền dữ liệu từ component cha xuống component con) và events (phát sự kiện từ component con lên component cha).

    • Tái sử dụng: Các component có thể được sử dụng lại trong nhiều phần khác nhau của ứng dụng hoặc trong các dự án khác.

    • Dễ bảo trì: Việc chia nhỏ ứng dụng thành các component giúp quản lý và bảo trì mã nguồn dễ dàng hơn.

    • Phát triển song song: Nhiều nhà phát triển có thể làm việc trên các component khác nhau cùng lúc.

    • Template Syntax


    Vue.js sử dụng cú pháp template dựa trên HTML, cho phép bạn khai báo giao diện người dùng một cách trực quan. Template này sau đó được biên dịch thành các hàm render Virtual DOM. Vue cung cấp các chỉ thị (directives) như v-bind, v-if, v-for, v-on để liên kết dữ liệu với HTML, hiển thị có điều kiện, lặp lại danh sách và xử lý sự kiện.

    • Lifecycle Hooks

    Mỗi Vue component trải qua một chu kỳ sống (lifecycle) từ khi được tạo ra cho đến khi bị hủy bỏ. Vue.js cung cấp các "lifecycle hooks" (các hàm được gọi tại các giai đoạn khác nhau của chu kỳ sống) cho phép bạn thực hiện logic tùy chỉnh tại những thời điểm cụ thể, ví dụ như:

    • beforeCreate, created: Khi component được tạo.

    • beforeMount, mounted: Khi component được gắn vào DOM.

    • beforeUpdate, updated: Khi component được cập nhật.

    • beforeUnmount, unmounted: Khi component bị hủy bỏ.

    Kết luận#

    Vue.js hoạt động dựa trên sự kết hợp mạnh mẽ của hệ thống phản ứng dữ liệu, Virtual DOM, kiến trúc dựa trên component và cú pháp template trực quan. Những nguyên lý này cùng nhau tạo nên một framework hiệu quả, dễ học và linh hoạt, giúp các nhà phát triển xây dựng các ứng dụng web phức tạp với hiệu suất cao và trải nghiệm người dùng tuyệt vời.

Bài liên quan trong #VueJS

✓ Đã sao chép link