JS stack (@react-navigation/stack): toàn bộ animation và transition viết bằng JS qua Reanimated. Linh hoạt: custom transition, modal effect, gesture-driven dismiss. Nhược: animation chạy JS thread → có thể jank nếu thread busy lúc transition.
Native stack (@react-navigation/native-stack): wrap react-native-screens — dùng UINavigationController (iOS) và Fragment + FragmentTransaction (Android) bên dưới. Animation chạy trên native thread, hành vi y hệt navigation native (swipe-back iOS, header transition, large title iOS). Performance tốt hơn, đặc biệt trên Android low-end.
Trade-off:
- Native stack: customization animation hạn chế (chỉ vài preset), header style theo platform.
- JS stack: tự do thiết kế, nhưng phải tự test performance.
Khuyến nghị 2026: mặc định native stack. Chỉ dùng JS stack khi cần animation hoàn toàn custom (vd hero image transition cross-screen). Sự khác biệt rõ trên các app có nhiều screen — push/pop 30+ screen, native stack giữ FPS ổn định, JS stack bắt đầu drop frame.