Búsqueda en API
Tomas el ID y haces un fetch a tu backend para obtener el nombre, precio e imagen del producto.
Tener el valor del código (ej: "SKU-9920") es solo el principio. El verdadero reto es qué hacer con él. En una arquitectura profesional, el escáner no toma decisiones; solo emite datos.
Tu componente de cámara debe ser un “emisor”. Cuando detecta algo, delega la responsabilidad a un controlador superior.
El hardware procesa los frames buscando patrones (QR/Barras).
// 🧱 src/components/scanner/CameraScanner.tsxexport const CameraScanner = ({ onDataDetected }) => { const handleBarCodeScanned = ({ data }) => { // 1. Emitir el dato al padre onDataDetected(data); };
return <CameraView onBarcodeScanned={handleBarCodeScanned} ... />;};Dependiendo de tu app, el dato escaneado disparará diferentes flujos:
Búsqueda en API
Tomas el ID y haces un fetch a tu backend para obtener el nombre, precio e imagen del producto.
Deep Linking
Si el QR contiene una URL de tu app (myapp://products/123), usas Expo Router para navegar directamente.
Validación Local
Búsqueda rápida en un array local (útil para apps offline o tickets precargados).
Este ejemplo muestra cómo unir el escaneo con la lógica de negocio en un Screen:
// src/app/(checkout)/scanner.tsx (Lógica de Navegación)import { router } from 'expo-router';import { useProductStore } from '@/lib/modules/products/store';
const ScanScreen = () => { const { fetchProduct } = useProductStore();
const handleData = async (code: string) => { try { // 1. Buscamos el producto en nuestro cerebro (Lib/Modules) const success = await fetchProduct(code);
if (success) { // 2. Si existe, navegamos al detalle router.push(`/products/${code}`); } } catch (error) { Alert.alert("Error", "Código no registrado en el sistema"); } };
return <CameraScanner onDataDetected={handleData} />;};