Vue Reactivity Fundamentals
Mục lục
1. Diagram
- Reactivity System Overview
- ref() vs reactive()
- Dependency Tracking Flow
- Ref Unwrapping Behavior
- Deep Reactivity
2. Tổng quan
3. ref() - Reactive References
4. reactive() - Reactive Objects
5. Deep Reactivity
6. DOM Update Timing
7. Ref Unwrapping Rules
- Top-level trong Template
- Nested Property trong Template
- Reactive Object Property
- Array/Collection Element
8. So sánh ref() vs reactive()
9. Best Practices
10. Kết luận
1. Diagram
Reactivity System Overview
Component Instance (Data / Methods / Computed)
|
v
Vue Template (HTML-based)
|
------------------------------------------------
| | |
{{ interpolation }} v-bind / :attr v-on / @event
| | |
Text Node Attribute Binding Event Listener
| | |
-------------------- Reactivity --------------------
|
v
Virtual DOM Diff
|
v
Real DOM Update
ref() vs reactive()
ref():- Tạo reference phản ứng cho giá trị nguyên thủy.
- Cần
.valueđể truy cập/gán giá trị.
reactive():- Tạo đối tượng phản ứng sâu cho cả đối tượng.
- Không cần
.value, truy cập trực tiếp như đối tượng bình thường.
Dependency Tracking Flow
- Vue theo dõi sự thay đổi của state qua các bước:
- Component khởi tạo → đăng ký các phụ thuộc (dependencies).
- Khi state thay đổi, Vue biết được component nào cần cập nhật.
- Chỉ những phần tử trong DOM liên quan đến component đó mới được cập nhật.
Ref Unwrapping Behavior
- Trong template, Vue tự động “bóc vỏ” (
unwrap) giá trị củaref. - Ví dụ:
- `` → truy cập giá trị bên trong
myRef. - Không cần viết `` trong template.
- `` → truy cập giá trị bên trong
Deep Reactivity
reactive()hỗ trợ reactivity sâu cho các thuộc tính của đối tượng.- Thay đổi thuộc tính con của đối tượng cũng sẽ kích hoạt cập nhật giao diện.
- Ví dụ:
const state = reactive({ count: 0, user: { name: "John" } }); state.user.name = "Doe"; // Giao diện tự động cập nhật
2. Tổng quan
- Hệ thống reactivity của Vue cho phép tự động cập nhật giao diện khi state thay đổi.
- Dựa trên việc theo dõi và quản lý các phụ thuộc giữa state và giao diện.
- Hai API chính để tạo reactivity là
ref()vàreactive().
3. ref() - Reactive References
Cách sử dụng cơ bản
ref()được dùng để tạo ra một reference phản ứng.- Cú pháp:
const myRef = ref(initialValue). myRefbây giờ là một đối tượng có thuộc tínhvaluechứainitialValue.
Trong Template
- Khi sử dụng trong template, không cần phải thêm
.value. - Ví dụ:
<template> <div></div> <!-- Đúng --> <div></div> <!-- Vẫn đúng nhưng không cần thiết --> </template>