Mejores prácticas de bibliotecas esenciales
Resumen condensado de las 25 mejores prácticas más importantes de bibliotecas esenciales para equipos móviles Expo SDK 57 - extraídas de cada página en esta sección.
Busca en todas las páginas de la documentación
Resumen condensado de las 25 mejores prácticas más importantes de bibliotecas esenciales para equipos móviles Expo SDK 57 - extraídas de cada página en esta sección.
npx expo install para módulos nativos: react-native-reanimated, react-native-gesture-handler, react-native-mmkv, @shopify/flash-list, y @sentry/react-native deben coincidir con la tabla de compatibilidad SDK 57 - los pines manuales npm causan fallos de construcción nativa EAS.
Audita dependencias transitivas nativas antes de adoptar: Cada biblioteca nativa es superficie de autolinking, tamaño de instalación, y un elemento de reconciliación de actualización SDK - ejecuta npx expo-doctor y npx expo prebuild --dry-run en PRs de dependencias.
TanStack Query posee el estado del servidor: Listas de API, perfiles, y configuración con carga/error/caché pertenecen a Query - no a Zustand, Context, o búsquedas useEffect - @tanstack/react-query.
Zustand posee el estado UI cliente: Insignias de carrito, preferencias de tema, banderas de incorporación, y chips de filtro - un store por dominio con selectores - zustand.
Nunca duplicas datos de API en stores globales: Si Query ya cachea products, no los espejes en Zustand - la invalidación se vuelve manual y la limpieza de logout falla.
Conecta el ciclo de vida de Query móvil en el arranque: onlineManager + NetInfo y focusManager + AppState en _layout - sin esto, la recarga en primer plano y el reintento offline se comportan como defaults web - TanStack Query.
Un QueryClient por app: Crea en el layout raíz con useState(createQueryClient) - nunca por pantalla o por navegador.
Selectores Zustand siempre: useStore((s) => s.field) - bare useStore() re-renderiza en cada cambio de slice.
Secretos nunca en Zustand persist o MMKV plaintext: Tokens y credenciales de refresh viven en expo-secure-store - MMKV mantiene solo preferencias no secretas y borradores.
Elige almacenamiento por forma de datos: AsyncStorage para JSON pequeño en arranque; MMKV para lecturas síncronas de ruta caliente; SQLite para datos offline relacionales - no un store para todo - react-native-mmkv.
Versiona cada esquema persistido: meta:schemaVersion para MMKV, PRAGMA user_version para SQLite, migraciones clave antes de que nuevas formas lleguen a producción.
FlashList después de perfilar, no por defecto: Migra feeds cuando el perfilado Android muestra scroll jank - mantén FlatList para pantallas de configuración cortas - @shopify/flash-list.
estimatedItemSize es obligatorio en FlashList: Las estimaciones incorrectas causan salto de scroll y espacios en blanco - establece minHeight en filas para que coincida.
Memoiza filas de listas recicladas: memo en componentes de fila, renderItem estable via useCallback, estado solo props - las vistas recicladas exponen bugs de cierre obsoleto.
Instala Reanimated y Gesture Handler como pareja: Matriz SDK 57 - react-native-reanimated ~4.0.0 y react-native-gesture-handler ~2.28.0 - react-native-reanimated & gesture-handler.
Plugin Babel último: react-native-reanimated/plugin es siempre la entrada final en babel.config.js - luego npx expo start --clear.
GestureHandlerRootView en raíz: Envuelve app/_layout.tsx - los pans y sheets fallan silenciosamente sin él.
Importa Animated desde Reanimated para worklets: No desde react-native - mezclar APIs rompe UI controlada por gestos.
Reconstruye dev client después de cambios de bibliotecas nativas: MMKV, FlashList, Sentry, y Reanimated requieren reconstrucción EAS o dev client - el reinicio de Metro solo no es suficiente.
Un reportero de caídas: @sentry/react-native con configuración wizard - no sentry-expo (deprecated) y no dos vendors - sentry-expo / @sentry/react-native.
Sentry.init antes de otras importaciones: Parte superior de _layout.tsx; Sentry.wrap en raíz una vez - empareja con carga de source map en cada construcción EAS production.
Establece release y dist correctamente: release = versión nativa + build; dist = id de actualización OTA - alinea reportes de caída con el binario que los usuarios ejecutan - Sentry para React Native.
Retira bibliotecas no utilizadas antes de actualizaciones SDK: Ejecuta npx knip y npx depcheck - los módulos nativos muertos inflan autolinking y rompen la reconciliación - Conceptos básicos de bibliotecas esenciales.
Lista de verificación de PR de dependencias: npx expo install, expo-doctor limpio, nota de prueba de dispositivo, sin biblioteca de clase de problema duplicada, ADR actualizado si el default del equipo cambia.
El logout borra todas las capas: queryClient.clear(), reset de Zustand, limpieza de instancia de usuario MMKV, eliminación de token SecureStore, y tablas de usuario SQLite - el caché obsoleto es un defecto de seguridad.
TanStack Query + NetInfo, Zustand, MMKV (cuando se perfila), FlashList (para feeds), Reanimated 4 + Gesture Handler, y @sentry/react-native - instalado via npx expo install.
Solo JS: @tanstack/react-query, zustand. Módulos nativos: siempre npx expo install. Confirma cambios de lockfile con cada PR de dependencias.
Comienza con AsyncStorage. Añade MMKV cuando el perfilado muestra getItem async en la ruta crítica - borradores de compositor, flags de características leídos en cada mount, parpadeo de Zustand persist.
No - perfila primero. Las listas cortas y pantallas de configuración se mantienen en FlatList hasta que el rendimiento del scroll falla en el hardware Android objetivo.
Las secciones de Estado Management y Observability tienen libros de cocina completos - las páginas de Essential Libraries son las tarjetas de instalación y defaults con enlaces hacia adentro.
Versiones de stack: Esta página fue escrita para React 19.2.3, React Native 0.86.0, y Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última actualización: 19 jul 2026