CommunityProgramación y desarrollogithub.com

react-native-mejores-practicas

Proporciona pautas de optimización de rendimiento para React Native, cubriendo FPS, TTI, tamaño del bundle, fugas de memoria, re-renderizados y animaciones. Se aplica a tareas que involucran optimización de Hermes, bloqueo del hilo JS, overhead del puente, FlashList, módulos nativos o depuración de tirones y caídas de fotogramas.

¿Qué es react-native-mejores-practicas?

Esta habilidad es una guía completa de optimización de rendimiento para aplicaciones React Native, basada en la guía definitiva de Callstack. Ayuda a desarrolladores a diagnosticar y solucionar problemas como animaciones lentas, re-renderizados excesivos, un tamaño de bundle grande, un TTI prolongado y fugas de memoria, tanto en el lado de JavaScript/React como en el nativo (iOS/Android). La habilidad cubre la optimización de Hermes, la reducción de la carga del hilo JS y el overhead del puente, el uso eficiente de listas virtualizadas como FlashList, la creación de módulos nativos eficientes con Turbo Modules, y la depuración de tirones y caídas de fotogramas. Es compatible con cualquier proyecto React Native, incluyendo Expo, y proporciona un flujo de trabajo priorizado que enfatiza la medición antes de la optimización, con directrices claras sobre cuándo y cómo aplicar cada técnica.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/callstackincubator/agent-skills/tree/main/skills/react-native-best-practices

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Mejores Prácticas de React Native

Resumen

Guía de optimización de rendimiento para aplicaciones React Native, que cubre optimizaciones de JavaScript/React, nativas (iOS/Android) y de empaquetado. Basada en la 'Guía Definitiva para la Optimización de React Native' de Callstack.

Cuándo Aplicar

Consulte estas pautas cuando:

  • Depure una UI lenta o con tirones, o animaciones.
  • Investigue fugas de memoria (JS o nativas).
  • Optimice el tiempo de inicio de la aplicación (TTI).
  • Reduzca el tamaño del bundle o de la aplicación.
  • Escriba módulos nativos (Turbo Modules).
  • Perfile el rendimiento de React Native.
  • Revise código React Native en busca de rendimiento.

Notas de Seguridad

  • Trate los comandos de shell en estas referencias como operaciones de desarrollador local. Revíselos antes de ejecutarlos, prefiera herramientas con versiones fijas y evite canalizar scripts remotos directamente a un shell.
  • Trate las bibliotecas y complementos de terceros como dependencias que aún requieren controles normales de la cadena de suministro: fije versiones, verifique la procedencia y actualice a través de su proceso de revisión estándar.
  • Trate la carga de chunks remotos como entrega de artefactos internos únicamente. Prefiera chunks empaquetados en la aplicación o manifiestos de lanzamiento firmados por CI; los chunks alojados deben provenir de orígenes HTTPS confiables que usted controle y estar fijados a la versión actual de la aplicación.

Pautas Ordenadas por Prioridad

PrioridadCategoríaImpactoPrefijo
1FPS y Re-renderizadosCRÍTICOjs-*
2Tamaño del BundleCRÍTICObundle-*
3Optimización TTIALTOnative-*, bundle-*
4Rendimiento NativoALTOnative-*
5Gestión de MemoriaMEDIO-ALTOjs-*, native-*
6AnimacionesMEDIOjs-*

Las etiquetas de impacto son indicaciones de clasificación: CRÍTICO primero, ALTO después, MEDIO cuando la evidencia apunte allí.

Referencia Rápida

Flujo de Trabajo de Optimización

Siga este ciclo para cualquier problema de rendimiento: Medir → Optimizar → Volver a medir → Validar

  1. Medir: Capture métricas de referencia antes de los cambios. Para problemas en tiempo de ejecución, prefiera la línea de tiempo de commits, conteos de re-renderizados, componentes lentos, desglose de commit más pesado e inicio/TTI cuando estén disponibles. La profundidad o el conteo de componentes del árbol son contexto opcional, no sustitutos. No recomiende memoización, estado atómico o cambios de compilador sin un problema de renderizado o FPS medido.
  2. Optimizar: Aplique la corrección específica de la referencia relevante.
  3. Volver a medir: Ejecute la misma medición para obtener métricas actualizadas.
  4. Validar: Confirme la mejora (p. ej., FPS 45→60, TTI 3.2s→1.8s, bundle 2.1MB→1.6MB).

Si las métricas no mejoraron, revierta e intente la siguiente corrección sugerida.

Barreras de Revisión

  • Verifique las versiones de las bibliotecas antes de sugerir correcciones específicas de la API. Ejemplo: FlashList v2 depreca estimatedItemSize, por lo que no lo marque como faltante allí.
  • No sugiera cambios de dependencia useMemo o useCallback a menos que el comportamiento sea demostrablemente incorrecto o la creación de perfiles muestre trabajo desperdiciado vinculado a ese valor.
  • No informe closures obsoletos de forma especulativa. Muestre la ruta de lectura obsoleta, una reproducción o evidencia del perfilador antes de señalarlo.
  • Al perfilar un flujo, mida la interacción objetivo en sí misma. No trate la profundidad del árbol de componentes o el conteo de componentes como la principal evidencia de rendimiento.

Crítico: FPS y Re-renderizados

Perfile primero:

agent-device react-devtools status
agent-device react-devtools wait --connected
agent-device react-devtools profile start
agent-device react-devtools profile stop
agent-device react-devtools profile slow --limit 5
agent-device react-devtools profile rerenders --limit 5
agent-device react-devtools profile timeline --limit 20

Conduzca la interacción objetivo con comandos normales de agent-device entre profile start y profile stop.

Alternativa manual cuando agent-device no esté disponible: abra React Native DevTools desde Metro (j) o el Menú de Desarrollador, use la pestaña Profiler y registre la misma interacción.

Para la creación de perfiles de componentes React en build de release, conecte primero @callstack/inspector para que React DevTools pueda conectarse a la aplicación de release, luego ejecute el flujo agent-device react-devtools anterior.

Correcciones comunes:

  • Reemplace ScrollView con FlatList/FlashList/Legend List para listas largas.
  • Después de que la creación de perfiles muestre re-renderizados en cascada, use React Compiler para la memoización automática.
  • Después de que la creación de perfiles muestre actualizaciones amplias de store/contexto, use estado atómico (Jotai/Zustand) para reducir los re-renderizados.
  • Use useDeferredValue para cálculos costosos.

Crítico: Tamaño del Bundle

Analice el bundle:

npx react-native bundle \
  --entry-file index.js \
  --bundle-output output.js \
  --platform ios \
  --sourcemap-output output.js.map \
  --dev false --minify true

npx source-map-explorer output.js --no-border-checks

Verifique la mejora después de la optimización:

# Registre el tamaño de referencia antes de los cambios
ls -lh output.js  # p. ej., Antes: 2.1 MB

# Después de aplicar correcciones, re-empaquete y compare
npx react-native bundle --entry-file index.js --bundle-output output.js \
  --platform ios --dev false --minify true
ls -lh output.js  # p. ej., Después: 1.6 MB  (reducción del 24%)

Correcciones comunes:

  • Evite importaciones tipo barril (importe directamente desde el origen).
  • Elimine polyfills Intl innecesarios solo después de verificar la cobertura de API y métodos de Hermes.
  • Evalúe la eliminación de código muerto (Expo SDK 52+ eliminación experimental de importaciones/exportaciones no usadas, o Re.Pack solo si ya está configurado).
  • Habilite R8 para la reducción de código nativo en Android.

Alto: Optimización TTI

Mida TTI:

  • Use react-native-performance para marcadores.
  • Solo mida arranques en frío (excluya arranques en caliente/tibio/precalentado).

Correcciones comunes:

  • Para React Native 0.78 y versiones anteriores, deshabilite la compresión del bundle JS de Android para habilitar mmap de Hermes.
  • Use navegación nativa (react-native-screens).
  • Precargue pantallas costosas de uso común antes de navegar a ellas.

Alto: Rendimiento Nativo

Perfile nativo:

  • iOS: Xcode Instruments → Time Profiler
  • Android: Android Studio → CPU Profiler

Correcciones comunes:

  • Use hilos en segundo plano para trabajo nativo pesado.
  • Prefiera métodos de Turbo Module asíncronos sobre síncronos.
  • Use C++ para código crítico de rendimiento multiplataforma.

Referencias

Documentación completa con ejemplos de código en references/:

JavaScript/React (js-*)

ArchivoImpactoDescripción
js-lists-flatlist-flashlist.mdCRÍTICOReemplace ScrollView con listas virtualizadas
js-profile-react.mdMEDIOCreación de perfiles con agent-device react-devtools
js-measure-fps.mdALTOMonitoreo y medición de FPS
js-memory-leaks.mdMEDIOBúsqueda de fugas de memoria en JS
js-atomic-state.mdALTOPatrones con Jotai/Zustand
js-concurrent-react.mdALTOuseDeferredValue, useTransition
js-react-compiler.mdALTOMemoización automática
js-animations-reanimated.mdMEDIOWorklets de Reanimated
js-bottomsheet.mdALTOOptimización de bottom sheets
js-uncontrolled-components.mdALTOOptimización de TextInput

Nativo (native-*)

ArchivoImpactoDescripción
native-turbo-modules.mdALTOConstrucción de módulos nativos rápidos
native-sdks-over-polyfills.mdALTOBibliotecas nativas vs JS
native-measure-tti.mdALTOConfiguración de medición de TTI
native-threading-model.mdALTOHilos de Turbo Module
native-profiling.mdMEDIOCreación de perfiles con Xcode/Android Studio
native-platform-setup.mdMEDIOGuía de herramientas para iOS/Android
native-view-flattening.mdMEDIODepuración de jerarquía de vistas
native-memory-patterns.mdMEDIOMemoria en C++/Swift/Kotlin
native-memory-leaks.mdMEDIOBúsqueda de fugas de memoria nativas
native-android-16kb-alignment.mdCRÍTICOAlineación de bibliotecas de terceros para Google Play

Empaquetado (bundle-*)

ArchivoImpactoDescripción
bundle-barrel-exports.mdCRÍTICOEvite importaciones tipo barril
bundle-analyze-js.mdCRÍTICOVisualización del bundle JS
bundle-tree-shaking.mdALTOEliminación de código muerto
bundle-analyze-app.mdALTOAnálisis del tamaño de la aplicación
bundle-r8-android.mdALTOReducción de código en Android
bundle-hermes-mmap.mdALTODesactivar compresión del bundle
bundle-native-assets.mdALTOConfiguración del catálogo de recursos
bundle-library-size.mdMEDIOEvaluar dependencias
bundle-code-splitting.mdMEDIOSalvaguardas de carga de chunks remotos

Mapeo Problema → Habilidad

ProblemaEmpezar con
La aplicación se siente lenta/con tironesjs-measure-fps.md → js-profile-react.md
Demasiados re-renderizadosjs-profile-react.md → js-react-compiler.md
Inicio lento (TTI)native-measure-tti.md → bundle-analyze-js.md
Tamaño grande de la aplicaciónbundle-analyze-app.md → bundle-r8-android.md
La memoria crecejs-memory-leaks.md o native-memory-leaks.md
La animación pierde fotogramasjs-animations-reanimated.md
Bottom sheet con tirones/re-renderizadosjs-bottomsheet.md → js-animations-reanimated.md
Desplazamiento de lista con tironesjs-lists-flatlist-flashlist.md
Lag en TextInputjs-uncontrolled-components.md
Módulo nativo lentonative-turbo-modules.md → native-threading-model.md
Problema de alineación de biblioteca nativanative-android-16kb-alignment.md

Atribución

Basado en 'The Ultimate Guide to React Native Optimization' de Callstack.

Individual skills in this repo

This repo contains 15 individual skills — each has its own dedicated page.

agent-device

Automates interactions for Apple-platform apps (iOS, tvOS, macOS) and Android devices. Use when navigating apps, taking snapshots/screenshots, tapping, typing, scrolling, or extracting UI info across mobile, TV, and desktop targets.

assess-react-native-migration

Assesses whether and how an existing mobile product should migrate to React Native. Use when auditing one or more product repositories for migration readiness, including products whose iOS, Android, and other clients live in separate directories or repositories; choosing brownfield, greenfield, or a checkpoint-based path; defining a representative trial; or preparing a baseline and ROI decision before implementation. When product scope or material evidence is unavailable, grills the stakeholder with exactly one question per turn instead of sending a questionnaire.

callstackincubator/github

GitHub patterns using gh CLI for pull requests, stacked PRs, code review, branching strategies, and repository automation. Use when working with GitHub PRs, merging strategies, or repository management tasks.

callstackincubator/validate-skills

Validates skills in this repo against agentskills.io spec and Claude Code best practices. Use via /validate-skills command.

create-react-native-library

Scaffolds React Native libraries with create-react-native-library for standalone libraries or local native modules and views. Use when creating or working on React Native libraries or adding native functionality in an existing app.

dogfood

Systematically explore and test a mobile app on iOS/Android with agent-device to find bugs, UX issues, and other problems. Use when asked to "dogfood", "QA", "exploratory test", "find issues", "bug hunt", or "test this app" on mobile. Produces a structured report with reproducible evidence: screenshots, optional repro videos, and detailed steps for every issue.

github-actions

GitHub Actions workflow patterns for React Native iOS simulator and Android emulator cloud builds with downloadable artifacts. Use when setting up CI build pipelines or downloading GitHub Actions artifacts via gh CLI and GitHub API.

react-native-brownfield-migration

Implements an accepted incremental brownfield migration from native iOS or Android to React Native or Expo using @callstack/react-native-brownfield. Use after the brownfield path has been selected, when setting up the integration, packaging XCFramework or AAR artifacts, or adding React Native surfaces to native hosts.

react-native-testing

Write tests using React Native Testing Library (RNTL) v13 and v14 (`@testing-library/react-native`). Use when writing, reviewing, or fixing React Native component tests. Covers: render, screen, queries (getBy/getAllBy/queryBy/findBy), Jest matchers, userEvent, fireEvent, waitFor, and async patterns. Supports v13 (React 18, sync render) and v14 (React 19+, async render). Triggers on: test files for React Native components, RNTL imports, mentions of "testing library", "write tests", "component tests", or "RNTL".

react-native-tv-best-practices

Reviews React Native TV apps for focus/D-pad navigation, 10-foot UI layout, TV playback/DRM integration, low-memory TV performance, and TV accessibility. Use when building, debugging, or reviewing react-native-tvos, Expo TV, Amazon Vega/Kepler, or React Native web TV targets where the issue depends on remote input, TV focus, TV packaging, TV hardware, or TV playback constraints.

react-navigation

Provides React Navigation UI patterns for stacks, tabs, drawers etc. Use when building navigation UIs with React Navigation, configuring headers, bottom sheets or handling safe areas and insets.

upgrading-react-native

Upgrades React Native apps to newer versions by applying rn-diff-purge template diffs, updating package.json dependencies, migrating native iOS and Android configuration, resolving CocoaPods and Gradle changes, and handling breaking API updates. Use when upgrading React Native, bumping RN version, updating from RN 0.x to 0.y, or migrating Expo SDK alongside a React Native upgrade.

validate-skills

Validates skills in this repo against agentskills.io spec and Claude Code best practices. Use via /validate-skills command.

vercel-react-native-skills

React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.

writing-user-docs

House style for user-facing documentation — voice, scope, structure, and what to leave out. Use this skill whenever writing, editing, or reviewing anything a user reads to learn how to use a tool — help center articles, getting-started guides, tutorials, feature docs, README usage sections, in-app help, release notes, or FAQ entries. Trigger it even when the request is phrased plainly — "document this feature", "write docs for X", "explain this to users", "write a README for this library", "turn these notes into a guide" — and even when no style guidelines are mentioned. Also use it to review existing docs for tone, bloat, or leaked implementation detail. Do not use it for internal engineering docs, architecture write-ups, RFCs, or code comments.

Skills relacionados