Handling edge cases, recursive components, and inline templates in Vue 2.7.
Handling Edge Cases
Các kỹ thuật ít dùng nhưng cần biết khi gặp tình huống đặc biệt. Phần lớn nên hạn chế dùng vì phá vỡ luồng dữ liệu chuẩn (props xuống, events lên).
Truy cập instance khác
refs
ref lấy tham chiếu trực tiếp tới DOM element hoặc child component instance. Chỉ truy cập sau khi đã mount, dùng cho thao tác bắt buộc (focus input, gọi method của thư viện).
$refs không reactive, không dùng trong template hay computed.
$parent / $root
$parent truy cập instance cha, $root truy cập root. Dễ tạo coupling khó bảo trì, ưu tiên props/events thay thế. Tránh dùng trừ khi thật cần.
Dependency injection: provide / inject
Truyền dữ liệu xuống component con sâu nhiều cấp mà không phải truyền props qua từng tầng.
Lưu ý: inject mặc định không reactive. Dùng cho config tĩnh (theme, locale), không dùng cho state thay đổi liên tục.
Programmatic event listeners
Tự quản lý listener trên instance bằng $on, $once, $off. Hữu ích khi đăng ký listener cho thư viện third-party và cần cleanup.
Recursive component
Component có thể tự gọi chính nó qua name, dùng render cấu trúc cây (menu, comment lồng nhau). Phải có điều kiện dừng để tránh vòng lặp vô hạn.
Force update và v-once
this.$forceUpdate() ép render lại, gần như không bao giờ cần nếu state đúng reactive. Nếu phải dùng, thường là dấu hiệu data không reactive (xem note Vue Instance về $set).
v-once render một lần rồi cache, bỏ qua cập nhật sau đó. Dùng cho nội dung tĩnh nhiều để tối ưu.
Tóm tắt khi nào dùng
Tips cho AEM
Tình huống hay gặp: tích hợp thư viện third-party đã có sẵn trong project AEM (carousel, datepicker, chart). Khởi tạo trong mounted dùng $refs, và huỷ trong beforeDestroy để tránh memory leak khi component bị remove (vd khi điều hướng hoặc author xoá component).