Saltar al contenido principal

React Native 0.84 - Hermes V1 por Defecto

· 8 min de lectura
Alex Hunt
Alex Hunt
Software Engineer @ Meta
Alan Lee
Alan Lee
Software Engineer @ Meta
Christian Falch
Christian Falch
Software Engineer @ Expo
Gabriel Donadel Dall'Agnol
Gabriel Donadel Dall'Agnol
Software Engineer @ Expo
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

¡Hoy estamos encantados de lanzar React Native 0.84!

Esta versión establece Hermes V1 como el motor JavaScript predeterminado, aportando mejoras significativas de rendimiento a todas las apps de React Native. También continuamos eliminando la Arquitectura Legacy en iOS y Android, e incluimos binarios precompilados para iOS por defecto.

Lo más destacado

Hermes V1 por Defecto

Hermes V1 es ahora el motor JavaScript predeterminado para React Native en iOS y Android, tras la opción experimental inicial en React Native 0.82.

Hermes V1 representa la siguiente evolución del motor Hermes, con mejoras significativas tanto en el compilador como en la máquina virtual que ofrecen un rendimiento JavaScript notablemente superior.

Qué Significa Esto para Tu App

  • Mejoras automáticas de rendimiento: Todas las apps usarán Hermes V1 por defecto, obteniendo mayor velocidad de ejecución y menor uso de memoria.

  • No se requiere migración: Si ya usas Hermes (predeterminado desde la 0.70), obtendrás automáticamente Hermes V1. No se necesitan cambios de configuración.

Opting out from Hermes V1

Package manager override

Force the installation of the legacy hermes-compiler package in your package.json:

package.json
"overrides": { "hermes-compiler": "0.15.0" }

iOS

When installing CocoaPods dependencies, pass the RCT_HERMES_V1_ENABLED=0 and RCT_USE_PREBUILT_RNCORE=0 environment variables.

Android

Add hermesV1Enabled=false inside the android/gradle.properties file, and configure the application to build React Native from source.

Binarios Precompilados en iOS por Defecto

React Native 0.84 ahora incluye binarios precompilados para iOS por defecto. Anteriormente disponibles como opción, ahora están activados directamente, reduciendo significativamente los tiempos de compilación para apps iOS.

Esto significa que ya no necesitas compilar el núcleo de React Native desde código fuente cada vez que haces una compilación limpia. Los binarios precompilados .xcframework se descargan y usan automáticamente durante pod install.

información

Si necesitas compilar React Native desde código fuente (por ejemplo, para excluir Hermes V1), puedes desactivar los binarios precompilados configurando RCT_USE_PREBUILT_RNCORE=0 al instalar los pods.

Componentes de Arquitectura Legacy Eliminados

Continuando el trabajo iniciado en la 0.82 (que hizo de la Nueva Arquitectura la única opción en tiempo de ejecución), React Native 0.84 sigue eliminando código de Arquitectura Legacy en iOS y Android. Como se describe en el RFC, estamos eliminando varias clases de la Arquitectura Legacy en cada versión.

iOS

En la 0.83, introdujimos la bandera experimental RCT_REMOVE_LEGACY_ARCH para excluir código Legacy durante la compilación. En la 0.84, este es ahora el comportamiento predeterminado: el código Legacy ya no se incluye en tus compilaciones iOS, reduciendo tanto el tiempo de compilación como el tamaño de la app.

No se esperan problemas en apps que ya usan la Nueva Arquitectura: el código de la Capa de Interoperabilidad necesario para compatibilidad permanece intacto.

Re-enabling Legacy Architecture code on iOS

If you need to re-enable Legacy Architecture code in your iOS builds, you'll need to build from source. Install CocoaPods dependencies with the following flags:

RCT_USE_PREBUILT_RNCORE=0 RCT_REMOVE_LEGACY_ARCH=0 bundle exec pod install

Android

Removed Legacy Architecture classes

The following classes have been removed in this release:

com.facebook.react.LazyReactPackage
com.facebook.react.bridge.CxxModuleWrapper
com.facebook.react.bridge.CxxModuleWrapperBase
com.facebook.react.bridge.CallbackImpl
com.facebook.react.bridge.NotThreadSafeBridgeIdleDebugListener
com.facebook.react.bridge.OnBatchCompleteListener
com.facebook.react.bridge.ReactCxxErrorHandler
com.facebook.react.bridge.ReactInstanceManagerInspectorTarget
com.facebook.react.modules.debug.DidJSUpdateUiDuringFrameDetector
com.facebook.react.devsupport.BridgeDevSupportManager
com.facebook.react.uimanager.NativeKind
com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener
com.facebook.react.uimanager.layoutanimation.LayoutAnimationController
com.facebook.react.uimanager.layoutanimation.LayoutAnimationListener

Node.js 22 como Mínimo

React Native 0.84 requiere Node.js v22.11 o superior. Este cambio mejora la disponibilidad de características JavaScript modernas en el ecosistema de herramientas de React Native.

Asegúrate de actualizar tu versión de Node.js antes de actualizar. Te recomendamos usar un administrador de versiones de Node como nvm o fnm para gestionar las versiones de Node.

Otros cambios

React 19.2.3

Esta versión incorpora React 19.2.3 en React Native, incluyendo las últimas correcciones y mejoras del equipo de React.

Configuración plana de ESLint v9

La configuración de ESLint de React Native ahora admite la configuración plana de ESLint v9, lo que facilita adoptar las últimas herramientas de ESLint en tu proyecto.

Soporte de plataforma

  • Formatos de imagen: React Native 0.84 incluye soporte para formatos de imagen adicionales (HEIC y HEIF), facilitando el trabajo con salidas de cámaras modernas y bibliotecas de imágenes.

  • PlatformColor: Pruebas mejoradas y soporte para PlatformColor en interpolaciones animadas y rangos de salida.

  • Eventos de teclado en Android: Se añadió soporte para onKeyDown/onKeyUp en Android, permitiendo manejar eventos de teclado para teclados físicos y controles remotos de TV.

Accesibilidad

Los componentes de texto con manejadores onPress u onLongPress ahora reciben automáticamente accessibilityRole="link" para mejorar el soporte de accesibilidad, asegurando que los lectores de pantalla anuncien correctamente los elementos de texto interactivos.

En Android, se realizó un trabajo significativo para corregir problemas de estado de accesibilidad con vistas recicladas, asegurando que los estados isClickable y OnClickListener se reinicien correctamente cuando las vistas se reciclan, evitando que los lectores de pantalla anuncien estados incorrectos.

Mejoras en la API de URL

Se añadieron propiedades estándar faltantes a URL (hash, host, pathname, etc.) y métodos a URLSearchParams (get, set, delete, etc.), acercando la implementación de URL de React Native al estándar web. También se corrigió un problema de entradas duplicadas en URLSearchParams.

Otros cambios importantes

iOS

  • Se corrigió un raro fallo EXC_BAD_ACCESS en ImageResponseObserverCoordinator envolviendo observadores en punteros con conteo de referencias. Esto cambia las declaraciones de objetos en la API de observador RCTImage, lo que podría afectar bibliotecas dependientes como react-native-svg.

Android

  • Se eliminó BridgeDevSupportManager.

C++

  • JSBigString ahora implementa jsi::Buffer directamente. Se eliminó la indirección de BigStringBuffer (obsoleto por ahora). El código que herede directamente o dependa de BigStringBuffer podría necesitar actualizaciones.

JS

  • Se eliminaron las pestañas Perf y Network heredadas del Inspector de elementos en la aplicación, ya que estas funciones ahora están disponibles en React Native DevTools.

Lee la lista completa de cambios importantes en el CHANGELOG de la versión 0.84.

Obsoletos

Esta versión incluye dos obsoletos:

  • Networking: Las APIs XHRInterceptor y WebSocketInterceptor están obsoletas. Las herramientas de desarrollo deberían usar el dominio Network del Protocolo de Chrome DevTools (CDP).

  • TurboModules: TurboModuleProviderFunctionType está obsoleto.

Agradecimientos

¡React Native 0.84 contiene más de 650 commits de 95 colaboradores! Gracias por todo vuestro esfuerzo.

Queremos enviar un agradecimiento especial a quienes realizaron contribuciones significativas en esta versión:

  • Riccardo Cipolleschi por los binarios precompilados de iOS por defecto y la eliminación de la Arquitectura Heredada en iOS.

  • Rob Hogan por la actualización a Node.js 22.

  • Fabrizio Cucci por mejoras en accesibilidad en Android.

  • @pipopotamasu por el soporte de ESLint v9 Flat Config.

Actualización a la versión 0.84

información

La versión 0.84 es ahora la última versión estable de React Native, mientras que la 0.81.x pasa a no ser compatible. Para más información, consulta la política de soporte de React Native.

Cómo actualizar

Utiliza el React Native Upgrade Helper para ver cambios de código entre versiones de React Native en proyectos existentes, además de la documentación de actualización.

💡 Novedad: Prueba la habilidad de IA experimental upgrade-react-native para proyectos de la CLI de la comunidad.

Crear un nuevo proyecto

npx @react-native-community/cli@latest init MyProject --version latest

Expo

Para proyectos de Expo, React Native 0.84 estará disponible en las versiones expo@canary. El próximo SDK, SDK 56, se incluirá con la siguiente versión estable de React Native: 0.85.