Không có lựa chọn đúng cho mọi dự án; câu này kiểm tra bạn có cân được team, sản phẩm và chi phí bảo trì hay không.
React Native: viết JS/TS, render ra native UI component thật của từng platform. Từ RN 0.82 chỉ còn New Architecture (JSI, Fabric), Hermes V1 mặc định từ 0.84. Mạnh: hệ sinh thái npm, dùng lại kỹ năng React và một phần code với web, Expo lo build và OTA update. Yếu: phụ thuộc chất lượng thư viện bên thứ ba; tính năng native mới (Live Activities, widget) vẫn phải viết Swift/Kotlin.
Flutter: viết Dart, tự vẽ toàn bộ UI bằng engine riêng (Impeller) thay vì dùng component native. Mạnh: UI giống hệt nhau trên mọi platform, animation mượt, hot reload tốt, một bộ widget cho mobile/web/desktop. Yếu: app size nền lớn hơn, UI không tự đổi theo giao diện mới của OS, hệ sinh thái nhỏ hơn npm.
Native (Swift/Kotlin): dùng API mới ngay khi OS ra mắt, hiệu năng và tích hợp platform tốt nhất. Cái giá: hai codebase, hai team, mỗi tính năng làm hai lần.
Kotlin Multiplatform là lựa chọn thứ tư nên nhắc: chia sẻ logic (network, database, domain) bằng Kotlin, UI giữ native hoặc dùng Compose Multiplatform (iOS stable từ 5/2025).
Gợi ý quyết định:
- Team mạnh React/TS, cần ra MVP nhanh, có web song song → RN + Expo.
- Cần UI thương hiệu đồng nhất, nhiều animation custom → Flutter.
- App phụ thuộc sâu vào phần cứng/tính năng OS mới (AR, camera chuyên dụng, widget, đồng hồ) → Native.
- Đã có app native, muốn chia sẻ logic mà không viết lại UI → KMP.
Lưu ý: tránh trả lời chung chung kiểu "X nhanh hơn Y". Nhà tuyển dụng muốn nghe trade-off gắn với bối cảnh: team hiện có ai, sản phẩm cần gì, ai bảo trì sau 2–3 năm.