Ngoài các component giao diện, Expo cung cấp hơn 60 module native (gói 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ằng create-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.
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.
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 image-picker nhưng code cũng nhiều hơn.
Để quét QR, thêm prop barcodeScannerSettings={{ barcodeTypes: ['qr'] }} và onBarcodeScanned.TaskFlow: quét mã QR để tham gia nhóm (bài nâng cao).
Nếu chỉ cần “lấy một tấm ảnh”, dùng image-picker. Nếu cần “trải nghiệm camera trong app”, dùng camera. Đây là câu hỏi hay để học viên hỏi ngược lại AI khi AI tự chọn thư viện.
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.
Push notification trên Android không chạy trong Expo Go, bắt buộc dùng development build. Local notification vẫn thử được.
Lưu key-value đã mã hóa bằng Keychain (iOS) hoặc Keystore (Android).
Phân biệt với AsyncStorage: AsyncStorage không mã hóa, chỉ dùng cho dữ liệu thường như cài đặt giao diện hay bộ lọc đã chọn. Không bao giờ lưu token hoặc mật khẩu vào AsyncStorage — đây là lỗi AI hay mắc.
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ể

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.isDevice trướ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èm expo-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.
Một gói chứa nhiều cảm biến:Mẫu dùng chung là đăng ký lắng nghe, rồi nhớ hủy khi component unmount:
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 useEffect: nếu AI quên sub.remove(), cảm biến vẫn chạy ngầm và làm hao pin.

Các module khác trong tầng 3


Tầng 4 — Chuyên biệt và hiếm dùng

Học viên chỉ cần biết là có để khi gặp nhu cầu thì biết hỏi AI đúng tên module.

Phụ lục — Module đã lỗi thời mà AI hay sinh ra

Nhóm này rất quan trọng cho tinh thần “nhận biết khi AI sai”. Dữ liệu huấn luyện của AI chứa nhiều code cũ, nên AI dễ đề xuất các module sau:
Prompt mẫu để học viên tự kiểm tra:“Code bạn vừa sinh có dùng API hoặc thư viện nào đã deprecated trong Expo SDK hiện tại không? Liệt kê từng cái kèm phương án thay thế.”

Tổng kết: gợi ý gắn module vào lộ trình TaskFlow