Зміст
Коротко
Автор бібліотеки react-native-qr-camera-pro на Dev.to описав сканер QR і штрихкодів для React Native, зібраний цілком на нативному коді: Swift на iOS, Kotlin на Android, TurboModules і Fabric, без обробки кадрів у JavaScript. Міст до JS спрацьовує не частіше раз на 500 ms — решта залишається в AVFoundation і CameraX + ML Kit.
Що сталося
Більшість QR-бібліотек для React Native або не підтримують New Architecture, або тягнуть повноцінний camera SDK заради однієї функції. Альтернатива — гнати кадри через JS і декодувати WASM/JS-декодером: працює, але тисне на JS thread і ріже frame rate.
react-native-qr-camera-pro вирішує інакше:
- iOS —
AVCaptureMetadataOutput: Apple сама детектує коди, буфери не копіюються в user space; - Android — CameraX
ImageAnalysis+ ML Kit з апаратним прискоренням де доступно.
Архітектура — три шари: публічний TS API (QrCameraProView, хуки useBarcodeScanner / useCameraError, imperative startScanning / stopScanning / toggleTorch), Codegen-driven bridge (TurboModules + Fabric), нативна платформа з zero JS у pipeline кадрів.
На обох платформах BarcodeThrottler пригнічує дублікати: той самий код протягом 500 ms — ігнор, інший код — одразу проходить. Preview (AVCaptureVideoPreviewLayer / CameraX PreviewView) живе в Fabric і не прив’язаний до циклу рендера React.
Підтримуються QR, EAN-8/13, Code 128/39/93, PDF-417, Aztec, Data Matrix, ITF та інші формати.
Чому це важливо
Сканування — типовий «гарячий» сценарій: камера, 30+ fps, real-time. Будь-яка серіалізація через legacy bridge на кожен кадр — вузьке місце. New Architecture (JSI, TurboModules без JSON, Fabric для view) якраз про передбачувану продуктивність нативних модулів.
Підхід «native-only» показує шаблон для feature-модулів:
- не тягнути monolithic SDK заради однієї задачі;
- тримати threading за документацією платформи (iOS:
startRunning()не на main; Android: analysis на dedicated executor); - throttle на межі JS, а не «шлемо все підряд».
Для команд на RN 0.7x+ з увімкненою New Architecture це практична альтернатива застарілим scanner-пакетам.
На практиці
Якщо потрібен QR/штрихкод у React Native:
- Встановіть
react-native-qr-camera-pro, на iOS додайтеNSCameraUsageDescriptionу Info.plist, виконайтеpod install. - Рендеріть
<QrCameraProView style={{ flex: 1 }} />і підпишіться черезuseBarcodeScanner. - Керуйте сесією явно:
startScanning()/stopScanning()— throttler скидається при stop. - Обробляйте помилки камери через
useCameraError— permission і hardware failures приходять із нативної сторони. - Для torch використовуйте
toggleTorch(true|false)— без зайвих re-render preview.
Кейси зі статті: retail/inventory, event check-in, logistics, payment QR, 2FA. У roadmap автора — crop viewfinder, haptic feedback, Expo plugin.
Підсумок
react-native-qr-camera-pro — приклад «правильного» нативного модуля під New Architecture: lean scope, platform APIs замість JS frame processing, свідомий throttling на мосту. Має сенс дивитися вихідники, якщо проєктуєте свій camera/barcode-модуль або мігруєте з legacy scanner-бібліотек.

