expo-*). Chúng cho code JavaScript/TypeScript truy cập phần cứng và hệ điều hành: camera, cảm biến, thông báo, file, bảo mật… Bạn không cần viết Swift hay Kotlin.
Thứ tự “phổ biến → hiếm dùng” dưới đây là ước lượng dựa trên mức độ xuất hiện trong app thực tế. Trạng thái hỗ trợ Expo Go và API có thể thay đổi theo từng SDK — luôn đối chiếu tại docs.expo.dev/versions/latest trước khi dạy hoặc build.
Quy tắc chung
1
Luôn cài bằng expo install
Không dùng
npm install. Lệnh npx expo install tự chọn phiên bản tương thích với Expo SDK của dự án.2
Kiểm tra Expo Go hay development build
Expo Go đã có sẵn phần lớn module nên chạy được ngay. Một số module cần development build (
npx expo run:android hoặc EAS Build) — các module này được đánh dấu bên dưới.3
Nhớ mẫu xin quyền dùng chung
Hầu hết module chạm vào phần cứng hoặc dữ liệu cá nhân đều theo cùng một mẫu:
Tầng 1 — Hạ tầng: gần như app nào cũng có
Nhóm này thường có sẵn khi tạo dự án bằngcreate-expo-app. Học viên dùng chúng mà nhiều khi không để ý.
expo-image nên được ưu tiên thay cho <Image> mặc định của React Native mỗi khi hiển thị ảnh từ mạng:
Tầng 2 — Tính năng rất phổ biến
Đây là nhóm “biến app thành app di động thật sự”. Phần lớn app thương mại dùng ít nhất vài module trong nhóm này.expo-image-picker — Chọn ảnh hoặc chụp nhanh
expo-image-picker — Chọn ảnh hoặc chụp nhanh
Dùng để chọn ảnh từ thư viện hoặc mở camera hệ thống để chụp một tấm. Đây là cách đơn giản nhất để lấy ảnh, đủ dùng cho 80% nhu cầu.TaskFlow: nộp ảnh minh chứng (Buổi 7). Hàm tương tự để chụp ảnh là
launchCameraAsync.expo-camera — Camera tùy biến hoàn toàn
expo-camera — Camera tùy biến hoàn toàn
Dùng khi cần giao diện camera riêng nằm ngay trong app, chẳng hạn khung ngắm tùy chỉnh, quét mã QR/barcode hoặc quay video. Mạnh hơn Để quét QR, thêm prop
image-picker nhưng code cũng nhiều hơn.barcodeScannerSettings={{ barcodeTypes: ['qr'] }} và onBarcodeScanned.TaskFlow: quét mã QR để tham gia nhóm (bài nâng cao).expo-notifications — Thông báo
expo-notifications — Thông báo
Xử lý local notification (app tự lên lịch) và push notification (server gửi về).
- TaskFlow: nhắc deadline (local), báo có task mới hoặc bình luận mới (push), ở Buổi 7.
expo-secure-store — Lưu dữ liệu nhạy cảm
expo-secure-store — Lưu dữ liệu nhạy cảm
Lưu key-value đã mã hóa bằng Keychain (iOS) hoặc Keystore (Android).
expo-haptics — Rung phản hồi
expo-haptics — Rung phản hồi
Tạo rung nhẹ khi người dùng thao tác. Chỉ tốn một dòng code nhưng làm app “có cảm giác xịn” hơn hẳn.TaskFlow: rung khi đánh dấu task hoàn thành hoặc khi kéo thanh tiến độ.
Các module phổ biến khác trong tầng 2
Riêng
expo-file-system: từ SDK 54, API mới hướng đối tượng (File, Directory) là mặc định, còn API cũ chuyển sang expo-file-system/legacy. AI thường sinh code theo API cũ — đây là ví dụ thực tế để dạy kỹ năng “kiểm tra AI có dùng API lỗi thời không”.Tầng 3 — Phổ biến vừa: dùng khi có nhu cầu cụ thể
expo-device — Thông tin thiết bị
expo-device — Thông tin thiết bị
Cho biết app đang chạy trên thiết bị nào: hãng, model, hệ điều hành, là máy thật hay simulator.Ứng dụng thực tế:
- Kiểm tra
Device.isDevicetrước khi đăng ký push notification, vì simulator không nhận được push. Đoạn code này gần như luôn đi kèmexpo-notifications. - Gửi kèm thông tin thiết bị trong form báo lỗi.
- TaskFlow: hiển thị “Đăng nhập trên Galaxy S23” trong màn hình Tài khoản.
expo-sensors — Cảm biến chuyển động
expo-sensors — Cảm biến chuyển động
Một gói chứa nhiều cảm biến:TaskFlow: “lắc để làm mới danh sách task” — bài tập vui, dễ thấy kết quả. Cũng là dịp tốt để dạy cleanup trong
Mẫu dùng chung là đăng ký lắng nghe, rồi nhớ hủy khi component unmount:
useEffect: nếu AI quên sub.remove(), cảm biến vẫn chạy ngầm và làm hao pin.