Al final de 2021, implementamos con éxito la Nueva Arquitectura de React Native en la aplicación de Facebook. Ahora es el momento de capacitar a todos los desarrolladores de React Native en el mundo para que utilicen la Nueva Arquitectura de React Native, tanto el nuevo renderizador Fabric como el nuevo sistema TurboModule. Pero migrar todo un ecosistema a una Nueva Arquitectura no es una tarea fácil. Para apoyar a toda la comunidad en este esfuerzo, hemos preparado un conjunto de herramientas y materiales que ayudarán tanto a los desarrolladores de aplicaciones como a los de bibliotecas a unirse a nosotros en este viaje. En la charla, presentaremos cómo se ve la Nueva Arquitectura de React Native en el espacio de OSS. Discutiremos el impacto que esto tendrá en el desarrollo de proyectos de React Native. Por último, cubriremos lo que aprendimos de la migración de la Nueva Arquitectura de React Native en Meta, y cómo pueden abordar su migración en su organización.
This talk has been presented at React Day Berlin 2022, check out the latest edition of this React Conference.
FAQ
La nueva arquitectura de React Native es una actualización que integra React 18 en dispositivos móviles y nativos. Elimina el uso del 'Bridge', un componente que era un cuello de botella, y introduce mejoras como un nuevo renderizador conocido como 'Fabric', 'Turbo Modules' para la interacción con plataformas nativas, y 'CodeGen' para la seguridad de tipos en la API.
Los principales componentes de la nueva arquitectura incluyen el 'Fabric', que es el nuevo renderizador que utiliza React 18, 'Turbo Modules' que facilitan la interacción con las APIs nativas de Android e iOS, y 'CodeGen' que ofrece seguridad de tipos en la API.
Para empezar a usar la nueva arquitectura de React Native, debes asegurarte de que tu proyecto esté actualizado a React Native 68 o superior, que son las versiones que soportan estas nuevas APIs. Es crucial verificar la compatibilidad de las bibliotecas que utilizas y considerar la actualización de aquellas que sean compatibles con la nueva arquitectura.
La nueva arquitectura de React Native ofrece varios beneficios, como la eliminación del 'Bridge', lo que reduce los cuellos de botella en la comunicación entre JavaScript y la capa nativa, mejoras en el rendimiento gracias a optimizaciones específicas de la plataforma, y mayor seguridad y estabilidad mediante la integración de 'CodeGen' para la seguridad de tipos.
Antes de migrar a la nueva arquitectura, es importante revisar y asegurar que las bibliotecas de terceros que utilizas estén actualizadas y sean compatibles con los nuevos componentes como Fabric y Turbo Modules. La migración también puede requerir ajustes en el código nativo y la configuración del proyecto para adaptarse a los nuevos requisitos de compilación.
La nueva arquitectura está soportada a partir de React Native 68. Esta versión y las siguientes incluyen soporte para las nuevas APIs que facilitan la utilización de React 18 y las mejoras en la arquitectura nativa.
La nueva arquitectura de React Native está diseñada para mejorar el rendimiento al eliminar cuellos de botella y optimizar la comunicación entre JavaScript y el código nativo. Sin embargo, las ganancias específicas de rendimiento dependerán del caso de uso particular y de cómo se implementen las nuevas APIs en la aplicación.
La charla trata sobre la nueva arquitectura de React Native y su introducción a la comunidad de código abierto. La nueva arquitectura tiene como objetivo llevar React 18 a plataformas móviles y nativas, al tiempo que elimina el cuello de botella del componente Bridge. Incluye conceptos fundamentales como el nuevo renderizador (Fabric), el sistema de módulos nativos (TurboModule), la generación de código para la seguridad de tipos y el modo sin puente. La arquitectura simplifica el proceso de desarrollo para los desarrolladores web, requiere cambios en las herramientas de compilación y recomienda el uso del motor de JavaScript Hermes. También enfatiza la importancia de explorar nuevas API, migrar bibliotecas y proporcionar comentarios para mejorar el ecosistema.
Vamos a hablar sobre la nueva arquitectura de React Native y cómo la llevamos a la comunidad de código abierto. La nueva arquitectura es cómo vamos a llevar React 18 a dispositivos móviles y a nativo. La nueva arquitectura de React Native ha estado en los medios durante bastante tiempo. Hicimos nuestra implementación internamente. ¿Cómo lo sacamos? ¿Cómo permitimos que la comunidad de código abierto también lo use? Esta charla tratará sobre esto, exactamente. Cómo permitimos que las personas fuera de Meta se beneficien de React 18 y la nueva arquitectura en Nativo. Queremos llevar todos los beneficios de React 18 a Nativo. Pero no es solo eso. Queríamos deshacernos del componente Bridge, que es un gran cuello de botella en la arquitectura de React Native.
Genial. Hola a todos. Muchas gracias por unirse a mí hoy. Vamos a hablar sobre la nueva arquitectura de React Native y cómo la llevamos a la comunidad de código abierto. Como creo que muchos de ustedes aquí pueden ser desarrolladores de React y no de React Native, espero que hayan oído hablar de React 18. Para simplificarlo, la nueva arquitectura es cómo vamos a llevar React 18 a dispositivos móviles y a nativo. Una pequeña historia sobre mí. En realidad, soy un ingeniero de Android que trabaja en el equipo de React Native. Pueden encontrarme en línea como Kurtinico en Twitter y en GitHub. Y la nueva arquitectura de React Native ha estado en los medios durante bastante tiempo. Si realmente buscan en línea y buscan la nueva arquitectura de React Native, pueden encontrar bastante contenido, diría yo. Y veamos algunos de los videos que verán. El primero es de ReactConf 2018.
Entonces, hemos estado hablando mucho al respecto. Como el año pasado, mi colega Joshua dio una charla al respecto en React Native EU y se trataba de la nueva arquitectura dentro de Meta. Pero ahora el punto es, ¿cómo lo sacamos? ¿Cómo permitimos que la comunidad de código abierto también lo use? Si observamos una línea de tiempo de la nueva arquitectura, nuevamente, comenzó como un proyecto de seis meses en 2018. Pero resulta que el producto más grande que tenemos en Meta que utiliza React Native, que es la aplicación de Facebook, es bastante complicado. Y créanme, los ingenieros lograron utilizar todos los casos límite posibles y todas las API posibles de React Native para exprimir todo el rendimiento de este framework. Así que nos llevó, al final del día, casi tres años completar la implementación completa de la nueva arquitectura en la aplicación de Facebook. Pero luego, a partir de ahí, como dije, nos miramos a nosotros mismos y nos preguntamos, ¿cómo lo implementamos en código abierto? Y esta charla tratará sobre esto, exactamente. Cómo permitimos que las personas fuera de Meta se beneficien de React 18 y la nueva arquitectura en Nativo. Entonces, para dar un paso atrás y realmente entender por qué estamos trayendo la nueva arquitectura. Como dije antes, queremos llevar todos los beneficios de React 18 a Nativo. Pero no es solo eso. Si han estado trabajando con React Native, probablemente sepan que hay un componente que es crucial en la arquitectura de React Native, que se llama el Bridge. Esencialmente, es un componente que permite que la capa de JavaScript se comunique con la capa nativa y todo se pasa a través de este puente como JSON. Y como pueden imaginar, es un gran
2. Conceptos fundamentales de la nueva arquitectura
Short description:
Escribimos una vez las partes internas de nuestra arquitectura, lo que nos permite compartir optimizaciones entre Android e iOS. La nueva arquitectura introduce el componente codegen para la seguridad de tipos y sirve como base para futuras características. Los conceptos fundamentales, o pilares, incluyen el nuevo renderizador (fabric), el sistema de módulos nativos (turbo modules), el codegen para la seguridad de tipos y el modo sin puente. En Android, se generarán clases Java.
cuello de botella. Así que, primero, queríamos deshacernos de él. Como escribimos muchas de las partes internas de nuestra arquitectura, en realidad tomamos una postura y las escribimos una vez. Solíamos tener un renderizador de Android y un renderizador de iOS, que no estaban exactamente alineados. Así que escribimos muchas partes internas en C++ y esto nos permitió compartir algunas optimizaciones específicas de la plataforma entre las dos plataformas. Además, el uso del puente significaba que no podíamos realmente beneficiarnos de la seguridad de tipos. Por eso, la nueva arquitectura tiene un nuevo componente llamado codegen, que proporciona seguridad de tipos dentro de nuestra API. Y finalmente, debes pensar en la nueva arquitectura como la piedra fundamental para muchas características que se construirán sobre React 18 en estas nuevas APIs y también se entregarán a nativo. Entonces, necesitamos asegurarnos de que las personas estén utilizando esas APIs. Entonces, ¿cuáles son los conceptos fundamentales de la nueva arquitectura? Los llamamos pilares. Y tenemos varios de ellos. Primero, tenemos el nuevo renderizador. Y esto es lo que realmente utiliza React 18. Y a menudo se hace referencia a este nuevo renderizador como fabric. Luego tenemos el nuevo sistema de módulos nativos, que te permite interactuar con la plataforma nativa y llamar a las APIs de Android e iOS. Y a este mecanismo lo llamamos turbo modules. Luego, como dije antes, queríamos agregar seguridad de tipos a nuestra fórmula. Por eso introdujimos un nuevo componente llamado Cogen. Y el último pilar es el modo sin puente. Entonces, una vez que todo esté en su lugar, todos tus componentes sean compatibles con fabric y todo sea compatible con turbo modules y así sucesivamente, puedes desactivar completamente el puente. Lamentablemente, no tengo tiempo para profundizar en estos temas, y también son muy técnicos. Pero quiero darte una idea de cómo se verá el código cuando comiences a escribir módulos y componentes nativos y uses Cogen. Lo que imaginamos es que queremos que los desarrolladores definan una especificación, por lo que tendrás un archivo TypeScript, que se verá más o menos como este.
3. Arquitectura, Herramientas de compilación y Hermes
Short description:
La nueva arquitectura simplifica el proceso de escribir código para Android e iOS para los desarrolladores web. Genera el código de plantilla necesario basado en la API pública declarada, reduciendo la necesidad de codificación manual. La arquitectura requiere cambios en las herramientas de compilación, utilizando Gradle para Android y CocoaPods para iOS. El código C++ está encapsulado y oculto para los desarrolladores web, pero puede ser utilizado para aplicaciones específicas de rendimiento. La infraestructura de compilación se ha mejorado, eliminando el código heredado y solucionando los fallos de compilación. Además, se recomienda el motor de JavaScript Hermes para un mejor soporte y seguimiento de problemas.
Aquí defines una interfaz y dices que tienes una función que responde a la pregunta definitiva y registras este módulo. Y nuevamente, el punto es esta función y esta firma. Cogen es capaz de entender que estás declarando una API pública que utilizarás en tu código JavaScript. Y la información importante aquí es que hay una entrada que es una cadena y una salida que es un número. A partir de esta información, podemos generar gran parte del código de plantilla que no tienes que escribir. La cuestión es que a los desarrolladores web que trabajan con React Native no les gusta realmente escribir código de Android e iOS, por lo que estamos tratando de hacer esto lo más simple posible. Entonces, ¿cómo se verá esto en Android? Generaremos algunas clases Java. Así que tendremos una clase abstracta con el constructor y un método que cumpla con la firma. Entonces, en este caso, este será un método abstracto que acepta un JavaString como entrada y devuelve un double. Así que hacemos todo el tipo, resolvemos los tipos a los tipos específicos de la plataforma que cada plataforma acepta. Entonces, en iOS, por ejemplo, tendrás un protocolo Objective-C que acepta NSString y devuelve un NSNumber. Obviamente, en algún momento necesitarás escribir la lógica del negocio, como alguien debería responder a la pregunta definitiva, no podemos responder eso por ti, pero sí, estamos tratando de simplificar una gran cantidad de código de plantilla que ya no es necesario escribir.
Ok, sí, esta nueva arquitectura nos obligó a hacer muchos cambios en general, como puedes imaginar, porque ahora hay un generador de código que se ejecuta y hay sí, muchas partes móviles. Entonces, tomamos una postura en nuestras herramientas de compilación, por lo que muchos cambios están ocurriendo en nuestra integración con la plataforma subyacente, y aquí hay un poco de desafío, porque internamente en Meta utilizamos una herramienta de compilación llamada Buck, que también es de código abierto, y la nueva arquitectura para nosotros internamente funciona sobre esto, lo cual es genial, pero no podemos esperar que las personas fuera de Meta utilicen Buck porque es, quiero decir, es de código abierto, pero queremos utilizar las herramientas de compilación específicas de la plataforma en la que se ejecuta. Entonces, en Android se ejecutará en Gradle, y nos tomamos mucho tiempo para asegurarnos de que todo se integre bien. Habrá algo de código C++, por lo que también habrá archivos CMake que son manejados por Gradle. Pequeña advertencia, mucha gente me dijo que no quiere ver código C++, así que encapsulamos todo, los desarrolladores web no tendrán que ver CMake o código C++ en absoluto, pero está bajo el capó y se puede utilizar para aplicaciones específicas de rendimiento. Escribimos nuestro complemento de Gradle y efectivamente en React Native 71, esto elimina gran parte del código heredado y muchos de los fallos de compilación que los usuarios experimentaban al crear su aplicación de Android, esta lógica ha sido completamente reescrita. El resumen aquí es que dentro de tu arquitectura, en realidad estamos limpiando gran parte del código heredado y la infraestructura de compilación heredada que se acumuló en nuestro código de código abierto durante los años. En iOS, de manera similar, tenemos CocoaPods. Y nuevamente, tomamos una postura aquí para limpiar un poco las cosas. Escribimos mucha lógica, ahora tenemos una suite completa de scripts de Ruby que son más fáciles de usar, son más pequeños y están completamente probados. Así que esperamos que veas menos fallos de compilación en el futuro. Ok. Entonces, otro componente que en realidad, no es necesariamente parte de la nueva arquitectura, pero le dedicamos mucho tiempo y visualizamos la nueva arquitectura con estas cosas agrupadas, es nuestro motor de JavaScript llamado Hermes. En la documentación de la nueva arquitectura, en realidad se recomienda. Y podemos brindar un mejor soporte. Si tu aplicación se bloquea y tienes Hermes, podemos saber más qué está sucediendo. Así que invitamos a los usuarios a utilizar este motor y plantear cualquier problema que encuentren.
4. Bundled Hermes y Motor Predeterminado
Short description:
A partir de React Native 69, React Native ahora viene con Hermes, un motor de JavaScript que es totalmente compatible con cada versión de React Native. En el pasado, surgieron problemas de compatibilidad cuando el motor y React Native se construían en momentos diferentes. Sin embargo, con Hermes incluido, puedes usar un motor que sea totalmente compatible con tu versión de React Native. A partir de React Native 70, Hermes es el motor predeterminado para nuevos proyectos, aunque se puede desactivar si es necesario.
Podrías haber tenido problemas de compatibilidad en el pasado. A partir de React Native 69, hicimos un cambio llamado Hermes incluido. Ahora, cada versión de React Native viene con una versión específica de este motor de JavaScript que sabemos que es totalmente compatible con la versión de React Native. En el pasado, había escenarios en los que el motor se construía en un momento dado y React Native se construía en otro momento, y no eran realmente compatibles entre sí. Ahora tienes un motor que es totalmente compatible con tu versión de React Native en todo momento y simplemente puedes usarlo. A partir de React Native 70, que lanzamos hace un par de meses, Hermes es el motor predeterminado. Por lo tanto, todos los nuevos proyectos tendrán Hermes habilitado de forma predeterminada y si no lo deseas, porque podrías tener una razón válida, deberás desactivarlo.
5. Actualizaciones sobre Lenguajes Modernos y Cronograma
Short description:
Un par de actualizaciones en el lado de los lenguajes modernos. TypeScript ahora es totalmente compatible con Cogent y será el lenguaje predeterminado en React Native 71. Kotlin es totalmente compatible en Android. El sitio web de React Native .DEV está completamente migrado y es bilingüe, compatible con Java y Kotlin. Se está explorando el uso de Zwift y la interoperabilidad de C++.
Un par de actualizaciones también que hicimos en el lado de los lenguajes modernos, ya que mucha gente nos pide que usemos diferentes lenguajes de programación cuando usan React Native. Y aquí tengo muchas actualizaciones en realidad. TypeScript. Cuando lanzamos la primera versión de la documentación de la Nueva Arquitectura, el comentario más votado fue que no querían usar Flow, lo cual puedo entender perfectamente. Nuestra primera versión de la documentación era esencialmente nuestra wiki interna pulida y de código abierto. Y internamente en Meta usamos Flow, pero fuera de eso no es el caso. Así que tuvimos que reconstruir mucho código y dar soporte. Ahora TypeScript es totalmente compatible con Cogent. Y les contaré más, en realidad en la versión 71 de React Native, que se supone que se lanzará en un futuro cercano, en cuestión de semanas en este punto, TypeScript será el lenguaje predeterminado. Por lo tanto, todos los nuevos proyectos se crearán con TypeScript. Estamos enviando tipos junto con React Native. Y hemos analizado más de cerca nuestro ecosistema y pensamos que queremos dar más soporte a TypeScript. El siguiente en Android es Kotlin. Actualmente es totalmente compatible. De hecho, puedes usar Kotlin en todas partes en React Native, creo que la charla anterior te contará mucho más al respecto, así que asegúrate de estar atento. Nuestro sitio web también está completamente migrado y es bilingüe. Todos los ejemplos en React Native .DEV están tanto en Java como en Kotlin. Y puedes usar completamente el que desees y la plantilla que hicimos para TypeScript. También podríamos actualizar la plantilla para usar Kotlin. Aún no lo hemos hecho, pero esto está previsto para el futuro. Y por último, Zwift. Muchos ingenieros de IS nos están pidiendo que usemos Zwift, y sí, esto es un poco más complicado debido a cómo Zwift y C++ interoperan. Espero tener respuestas para esto en el futuro. Estamos observándolo de cerca y esperamos saber más. Así que el cronograma. ¿Qué está sucediendo y cuándo? Mencioné algunas cosas como algunas versiones de React Native, pero permítanme recapitular. Comenzamos a principios de este año, el despliegue de la nueva arquitectura comenzó en realidad este año con React Native 68. Esa es la primera versión de React Native que admite esas nuevas API. Luego, en React Native 69, agregamos el soporte de React 18. Esto puede ser un poco confuso, pero efectivamente la forma en que interactúan React y React Native es que React
6. Versiones de React Native y Nueva Arquitectura
Short description:
La primera versión de React Native que admite la versión 18 es la 69. Enviamos paquetes armados, con muchas mejoras en la experiencia relacionada con la nueva arquitectura. Lanzamos la nueva arquitectura en la versión 68, con muchas mejoras en el tiempo de compilación y la experiencia del desarrollador. En React Native 71, simplificamos la plantilla y eliminamos todo el código C++. Queremos escuchar a la comunidad y recopilar comentarios sobre las nuevas API. Para utilizar completamente React 18 y las API concurrentes, debes estar en React Native 69 y habilitar la nueva arquitectura.
React Native decide qué versión de React utilizar. Y la primera versión de React Native que admite la versión 18 es la 69. Por lo tanto, debes estar en la versión 69 como mínimo, no puedes simplemente cambiarla. Y enviamos paquetes armados, de los que hablé antes en la versión 70, con muchas cosas y muchas mejoras en realidad en la experiencia relacionada con la nueva arquitectura. No tengo tiempo para profundizar en todos ellos, pero algunos de esos puntos han sido muy solicitados por la comunidad. Así que lanzamos la nueva arquitectura en la versión 68, y la gente vino y nos dijo, esto es increíble, pero no funciona para mí porque A, B, C y D. Y escuchamos lo que la gente nos decía, y desarrollamos muchas mejoras en el tiempo de compilación, muchas mejoras en la experiencia del desarrollador, y así sucesivamente. Eso se incluyó en la versión 70. Y en la versión 71, simplificamos mucho la plantilla. Como dije antes, eliminamos todo el código C++. Básicamente, ahora no hay código C++ en absoluto, a menos que realmente quieras verlo porque puedes tener, no sé, tu biblioteca de criptografía, y quieres hacer tus cosas locas con C++, entonces puedes optar por tener código C++ del que eres responsable de mantener. Y luego, ¿qué sigue? Bueno, hoy, el Infinito y más allá porque, como dije, queremos saber qué funciona y qué no funciona para ti. Queremos escuchar a la comunidad, como, sí, esto es valioso para mí o esto no es valioso. Así que por favor prueba esas nuevas API. Todavía se consideran experimentales. No las estamos habilitando de forma predeterminada. Lo haremos en algún momento, pero en esta etapa, todavía estamos recopilando comentarios y escuchando a los autores de bibliotecas, a los autores de aplicaciones, qué es lo que no les funciona. Hablé brevemente sobre React 18 y React Native. Permíteme reiterar. Solo para aclarar las interacciones entre los dos marcos. Si estás en React Native 67 o 68, estás ejecutando efectivamente React 17. Es decir, la versión de React es 17. Y algunas de esas nuevas API como star transition no funcionarán. Para utilizar completamente React 18 y todas esas API concurrentes, debes estar al menos en React Native 69. Y no puedes... No puedes simplemente cambiar la versión de React. React Native decide por ti. Y aquí está el truco: en las versiones 69 y 70, para utilizar esas nuevas API debes estar en la nueva arquitectura. Es decir, debes habilitar la nueva arquitectura para usar React concurrente. Si intentas utilizar esas API pero no estás en la nueva arquitectura, simplemente no funcionarán. Serán vacías.
7. Explorando Nuevas APIs y Documentación
Short description:
Para mantenerse actualizado con el ecosistema y el marco de React Native en constante evolución, es crucial explorar las nuevas APIs y la documentación. La documentación oficial incluye explicaciones de los cambios, pautas para crear bibliotecas y aplicaciones, soporte de migración y documentos detallados de diseño sobre la arquitectura. La nueva arquitectura simplifica el proceso de configuración para iOS y Android, permitiendo a los desarrolladores probar fácilmente las nuevas APIs siguiendo instrucciones específicas. Ejecutar la aplicación con fabric establecido en true confirma el uso de la nueva arquitectura.
implementaciones, etc. Por lo tanto, es crucial que si tienes una aplicación de React Native y quieres mantenerte actualizado con la evolución del ecosistema y nuestro marco, eches un vistazo a esas... Sí, a esas nuevas APIs. ¿Y qué significa echar un vistazo a esas APIs? Hemos creado mucha documentación. Y todavía estamos iterando en ella y en realidad se trata de la documentación. Porque esas APIs, que lanzamos en la versión 68, estuvieron disponibles allí durante mucho tiempo. Creo que agregamos fabric en React Native 64 o 65. Pero simplemente no estaban documentadas. Recuerdo escuchar en este podcast, el show de React Native, donde la gente hablaba de que algunas bibliotecas intentaban usarlo, pero no sabían cómo tenían que ingeniar el código del marco, lo cual no es genial. Por eso ahora tenemos una documentación oficial. Encontrarás la nueva sección en el sitio web llamada la nueva arquitectura, donde se explica todo por qué hicimos ciertos cambios, cómo crear una nueva biblioteca, cómo crear una nueva aplicación, etc. Y también, una sección dedicada a la migración. ¿Cómo paso de una biblioteca o una aplicación que no es compatible con la arquitectura a tener el soporte completo para la arquitectura? Además de esto, ahora tenemos una nueva sección llamada arquitectura, que contiene documentos de diseño sobre nuestro trabajo interno y cómo funciona el renderizado, etc. A la gente, especialmente a los que usan bibliotecas populares como reanimated, les gustaría saber cómo trabajamos internamente y cuáles son los principios a seguir, etc. Así que tomamos una postura y también escribimos esos documentos en la nueva plantilla, como lo que sucede cuando eliges React Native en ella. Mi increíble aplicación se ha actualizado para que puedas probarla en tu arquitectura fácilmente. ¿Qué significa esto? Significa que en iOS, en lugar de llamar a pod install después de configurar tu proyecto, llamarás a nuestra ciudad en Newark habilitada para pod install. Y esto reconfigurará tu proyecto para permitirte probar la nueva arquitectura. En Android, en cambio, hay un archivo llamado Gradle dot properties, y cambiarás Newark enabled de false a true. Y simplemente puedes ejecutar react-native run-android, y estarás ejecutando esas nuevas APIs. Efectivamente, verás un mensaje en Metro que te dice: `Hey, estás ejecutando tu aplicación con fabric`.
8. Grupo de Trabajo, Ejemplos y Herramientas de Código Abierto
Short description:
Iniciamos el grupo de trabajo de la nueva arquitectura, que es un espacio de colaboración para hacer preguntas, compartir bibliotecas y discutir la migración de bibliotecas. También proporcionamos ejemplos para la migración de aplicaciones y bibliotecas, así como ejemplos de compatibilidad con versiones anteriores. Valoramos los comentarios y queremos escuchar historias de migración para mejorar las APIs. La antigua arquitectura todavía es experimental y animamos a las personas a probarla y proporcionar comentarios. Nuestras herramientas son de código abierto y nos comprometemos a hacerlas valiosas para todos.
establecido en true, y así sucesivamente. Por lo tanto, estás ejecutando efectivamente la nueva architecture. Muy rápido sobre un par de cosas más que también hicimos, porque veo que se me acaba el tiempo. Pero un par de un par de contenidos más. Primero, iniciamos el grupo de trabajo. Se llama el nuevo grupo de trabajo de la architecture. Y esto es similar al grupo de trabajo de React 18 que comenzamos hace un par de años. Es un espacio de colaboración donde puedes hacer preguntas, compartir tus bibliotecas, dar actualizaciones sobre cómo tu biblioteca se está migrando a la nueva architecture y conectarte con otras personas que también están investigando esas APIs. Si abres el grupo de trabajo, parece que es de solo lectura. Pero en realidad puedes solicitar unirte al grupo de trabajo usando el enlace de abajo. Y revisaré tu solicitud y te enviaré una invitación. También tenemos ejemplos, como cosas que se ejecutan efectivamente. Tenemos un repositorio de ejemplos de aplicaciones que contiene varias ramas. Y cada rama te explica cómo migrar una aplicación desde una versión determinada de React Native, y así sucesivamente. Y cada migración se realiza paso a paso. Por lo tanto, verás todos los commits sobre cómo habilitamos las diversas cosas. También tenemos un ejemplo de biblioteca que contiene ejemplos de cómo crear un módulo turbo o un módulo turbo nativo o un componente de fabric que sea compatible con versiones anteriores. Así que puedes crear algo que funcione tanto en la antigua como en la nueva architecture. Y con esto, realmente espero que en el futuro, cuando busque React Native nueva architecture en algún momento, escucharé tus historias, como escribirás sobre ello y me contarás, como, hey, fue un completo desastre porque tus compañeros se perdieron aquí, aquí, y allá, o las charlas fueron geniales o lo que sea. Realmente queremos escuchar tu historia de migración. Estamos iterando en esto. Sabemos que algunas APIs no son tan geniales y brillantes como te gustaría. Y por eso actualizamos algunas de ellas. Por eso la antigua architecture todavía es experimental. Y ahora es crucial que las personas prueben esto y nos digan qué funciona y qué no funciona. Sí. Y quiero recordarles que todas nuestras herramientas son de código abierto. Nos comprometemos completamente con este ecosistema. Pasamos mucho tiempo hablando con socios, con los mantenedores de bibliotecas. Y solo queremos hacer esas herramientas lo mejor posible y valiosas para todos. Y muchas gracias por escuchar.
9. Cambio a la Nueva Arquitectura y Dependencias
Short description:
¿Cuándo es un buen momento para cambiar las aplicaciones existentes a la nueva arquitectura? El cronograma para cambiar a la nueva arquitectura y dependencias es una consideración crucial. Si bien los TurboModules son compatibles con versiones anteriores y se pueden habilitar fácilmente, migrar bibliotecas de interfaz de usuario puede ser más desafiante. Se recomienda revisar la lista de dependencias y asegurarse de que la mayoría estén migradas. Las bibliotecas sin mantenimiento representan un riesgo de seguridad y brindan la oportunidad de evaluar y potencialmente actualizar o revivirlas.
Muchas gracias, Nicola. Fue como si nos iluminaras sobre la nueva arquitectura. Y sí, tenemos tiempo para preguntas. Sí. Tenemos algunas preguntas y comenzaré de inmediato. ¿Cuándo es un buen momento para cambiar las aplicaciones existentes a la nueva arquitectura o cuál es, en tu opinión, el cronograma para cambiar a la nueva arquitectura o qué dependencias? Sí. Esta es una pregunta bastante crucial, diría yo. Cuando comenzamos, a principios de este año, teníamos muchas bibliotecas, muchas bibliotecas populares, que no tenían soporte para Fabric o TurboModules, lo que dificultaba mucho la migración, especialmente en Fabric. Los TurboModules son realmente compatibles con versiones anteriores en el sentido de que puedes habilitarlos fácilmente. Y si tienes bibliotecas que están migradas o bibliotecas que no están migradas, funcionarán bien juntas. En cambio, en el lado de la interfaz de usuario, es mucho más difícil. Y estamos haciendo un gran esfuerzo en este sentido para que las bibliotecas migradas y no migradas funcionen bien juntas. Esperamos que haya más sobre este tema en el futuro. Pero por ahora, mi recomendación es revisar tu lista de dependencias y ver que la mayoría de ellas, muchas de ellas, estén realmente migradas. Por ejemplo, Reanimated, React Native screens, todas están migradas y tienen una versión compatible con Fabric. Pero a veces puedes usar una biblioteca que no tiene mantenimiento. Bueno, eso es desafortunado. Diría que también es una oportunidad para tomar una postura sobre qué bibliotecas dependes y, dependiendo de bibliotecas que no están mantenidas, generalmente es un riesgo de seguridad. Entonces, tal vez también sea una oportunidad para que las aplicaciones revisen en qué dependen y limpien algunas de ellas o potencialmente revivan algunas de ellas
10. Migración de Bibliotecas y Compatibilidad hacia Atrás
Short description:
Muchas bibliotecas se han migrado a la nueva arquitectura, lo que indica tracción por parte de la comunidad. Si bien la nueva arquitectura se considera experimental, está lista para producción y se está iterando. La compatibilidad hacia atrás está disponible para los componentes que no son de interfaz de usuario, pero la compatibilidad con fabric requiere consideraciones adicionales. La colaboración con Microsoft en herramientas como AlignDepth y RnXKit tiene como objetivo proporcionar información sobre la compatibilidad de las bibliotecas. El kit RnX está ganando fuerza para admitir la nueva arquitectura.
bibliotecas, bifurcándolas y actualizándolas. Estoy totalmente de acuerdo contigo. He visto muchas bibliotecas excelentes migrando a la nueva arquitectura, como Reanimated, React Native SVG, gesture handlers, y también mencionaste las screens. También hay mucha tracción por parte de la comunidad, pero creo que como desarrollador junior o alguien que no tiene conocimientos de C++ o Kotlin, o de la nueva arquitectura en sí, es realmente difícil ir y actualizar algo, ¿verdad? Sí, lo es, y por eso seguimos considerando la nueva arquitectura como experimental.
Yo diría, si me preguntaras, ¿está lista para producción? Te diría, bueno, la aplicación React Native más grande se ejecuta en ella, así que sí, está lista para producción. ¿Es fácil de usar? Estamos iterando en ello. Hay algunos detalles complicados, por ejemplo, en la versión 70, el tiempo de compilación en Android era de aproximadamente media hora. En la versión 71, utilizamos mucho el tiempo de compilación, y ahora es cuestión de segundos. Y esos cambios requieren un ciclo de retroalimentación de tu parte y también tiempo para que los solucionemos. Muy bien. Y creo que tenemos una pregunta que fue respondida durante tu charla. ¿Es necesario migrar todas las bibliotecas a la nueva arquitectura? Es compatible hacia atrás. Y creo que mencionaste la compatibilidad hacia atrás. Pero si puedes agregar más información. Sí, permíteme reiterar. La historia de la compatibilidad hacia atrás es, como dije, un poco más complicada en los dos componentes, en los dos pilares, los módulos nativos. Todo lo que no es de interfaz de usuario es compatible hacia atrás. Puedes usar los turbo módulos o los módulos nativos heredados, como los llamamos, una vez que habilitas la nueva arquitectura, en la interfaz de usuario. Sin embargo, si habilitas fabric, como si habilitaras la nueva arquitectura y tienes un componente que no es compatible con fabric, verás una caja morada que te indica que aquí debería haberse renderizado algo, pero esto no es compatible con fabric. Esto te brinda una retroalimentación inmediata si algo está funcionando o no. Pero también estamos trabajando con Microsoft en una herramienta llamada AlignDepth o Depth Check. Es parte de esta colección de herramientas llamada RnxKit, que es un conjunto de herramientas que Microsoft está desarrollando. Y estamos colaborando e iterando en proporcionar más información sobre qué bibliotecas son efectivamente compatibles con la nueva arquitectura y cuáles no. En el directorio de bibliotecas de React Native, hay una etiqueta que te indica si es compatible o no. Pero sí, una vez que todo esto sea estable, créeme, habrá una forma fácil de saber qué bibliotecas son compatibles y cuáles no.
Sí, fue una excelente respuesta. Y también vi un tuit de Lorenzo, ayer creo, sobre AlignDepth y el kit RnX. Está ganando cada vez más fuerza, diría yo, para respaldar esta nueva arquitectura. Creo que tengo una pregunta más, solo rápidamente.
11. Rendimiento y Migración a la Nueva Arquitectura
Short description:
Para nosotros, la nueva arquitectura ha valido la pena en términos de rendimiento. Nos permite desarrollar características como el pre-renderizado que antes no eran posibles. Sin embargo, habilitar la nueva arquitectura no garantiza ganancias de rendimiento inmediatas. Depende de tu caso de uso y bibliotecas. Migrar a la nueva arquitectura será necesario para beneficiarse de nuevas bibliotecas y APIs.
En términos de rendimiento, ¿valió la pena todo el trabajo que han hecho? Para nosotros, sí. Pudimos desarrollar una característica como el pre-renderizado o hacer cosas que la arquitectura anterior no era posible. Como, no nos permitía hacer.
Ahora la gente viene y nos dice, sí, habilita la nueva arquitectura y espera, como, ya sabes, picos de ganancias aquí y allá. Ese no es el caso. Como, la arquitectura es una, como dije, es una piedra fundamental para las herramientas en las que tienes que construir encima. Como, si estabas haciendo algo con el puente, entonces hacer eso con la nueva arquitectura, hacer eso de forma síncrona pasando de JavaScript directamente a C plus plus, te dará ganancias de rendimiento. Pero eso depende de tu caso de uso. No es que no haya ganancia de rendimiento inmediata. Y sí, realmente depende de tu caso de uso, de tus bibliotecas y de lo que estás haciendo. Y veremos cada vez más bibliotecas que utilizarán esas nuevas APIs, y tendrás que migrar para beneficiarte de esas nuevas bibliotecas. Genial. Sí. Muchas gracias. Muchas gracias a ti, Nicola. Es un placer tenerte aquí.
This Talk discusses Rack Native at Microsoft and the efforts to improve code integration, developer experience, and leadership goals. The goal is to extend Rack Native to any app, utilize web code, and increase developer velocity. Implementing web APIs for React Native is being explored, as well as collaboration with Meta. The ultimate aim is to make web code into universal code and enable developers to write code once and have it work on all platforms.
Today's Talk discusses the hidden costs of open source software and the importance of estate planning for open source stacks. It highlights the challenges faced by product managers in terms of library upgrades and conflicting priorities. The Talk also emphasizes the steps to establish an end-of-life policy for open source stacks, including monitoring, inventorying, ranking, and outlining upgrade plans. It further emphasizes the need to consider risk, dependencies, and business impact when identifying support dates and upgrade options. The Talk concludes by stressing the importance of being proactive in formalizing an end-of-life policy to avoid costly migration projects.
React Server Components (RSC) offer a more accessible approach within the React model, addressing challenges like big initial bundle size and unnecessary data over the network. RSC can benefit React Native development by adding a new server layer and enabling faster requests. They also allow for faster publishing of changes in mobile apps and can be integrated into federated super apps. However, implementing RSC in mobile apps requires careful consideration of offline-first apps, caching, and Apple's review process.
The Talk discusses the combination of React Native and Kotlin Multiplatform for cross-platform app development. Challenges with native modules in React Native are addressed, and the potential improvements of using Kotlin Multiplatform Mobile are explored. The integration of Kotlin Multiplatform with React Native streamlines native implementation and eliminates boilerplate code. Questions about architecture and compatibility, as well as the possibility of supporting React Native Web, are discussed. The React Native toolkit works with native animations and has potential for open-source development.
This Talk discusses building cross-platform component libraries for React and React Native, based on a successful project with a large government-owned news organization. It covers the requirements for React Native knowledge, building cross-platform components, platform-specific components, styling, and the tools used. The Talk also highlights the challenges of implementing responsive design in React Native.
Presentando FlashList: Construyamos juntos una lista performante en React Native
Top Content
WorkshopFree
3 authors
En esta masterclass aprenderás por qué creamos FlashList en Shopify y cómo puedes usarlo en tu código hoy. Te mostraremos cómo tomar una lista que no es performante en FlatList y hacerla performante usando FlashList con mínimo esfuerzo. Usaremos herramientas como Flipper, nuestro propio código de benchmarking, y te enseñaremos cómo la API de FlashList puede cubrir casos de uso más complejos y aún así mantener un rendimiento de primera categoría.Sabrás:- Breve presentación sobre qué es FlashList, por qué lo construimos, etc.- Migrando de FlatList a FlashList- Enseñando cómo escribir una lista performante- Utilizando las herramientas proporcionadas por la biblioteca FlashList (principalmente el hook useBenchmark)- Usando los plugins de Flipper (gráfico de llamas, nuestro perfilador de listas, perfilador de UI & JS FPS, etc.)- Optimizando el rendimiento de FlashList utilizando props más avanzados como `getType`- 5-6 tareas de muestra donde descubriremos y solucionaremos problemas juntos- Preguntas y respuestas con el equipo de Shopify
A diferencia de las pruebas unitarias, las pruebas de extremo a extremo buscan interactuar con su aplicación tal como lo haría un usuario real. Y como todos sabemos, puede ser bastante desafiante. Especialmente cuando hablamos de aplicaciones móviles. Las pruebas dependen de muchas condiciones y se consideran lentas e inestables. Por otro lado, las pruebas de extremo a extremo pueden dar la mayor confianza de que su aplicación está funcionando. Y si se hace correctamente, puede convertirse en una herramienta increíble para aumentar la velocidad del desarrollador. Detox es un marco de pruebas de extremo a extremo en caja gris para aplicaciones móviles. Desarrollado por Wix para resolver el problema de la lentitud e inestabilidad y utilizado por React Native en sí como su herramienta de pruebas E2E. Únete a mí en esta masterclass para aprender cómo hacer que tus pruebas de extremo a extremo móviles con Detox sean excelentes. Prerrequisitos- iOS/Android: MacOS Catalina o más reciente- Solo Android: Linux- Instalar antes de la masterclass
- Introducción - Cleo & nuestra misión- Lo que queremos construir, cómo encaja en nuestro producto & propósito, revisar los diseños- Comenzando con la configuración del entorno & “hola mundo”- Introducción a la animación de React Native- Paso 1: Hacer girar la rueda al presionar un botón- Paso 2: Arrastrar la rueda para darle velocidad- Paso 3: Agregar fricción a la rueda para frenarla- Paso 4 (extra): Agregar hápticos para una sensación inmersiva
Desplegar aplicaciones React Native manualmente en una máquina local puede ser complejo. Las diferencias entre Android e iOS requieren que los desarrolladores utilicen herramientas y procesos específicos para cada plataforma, incluidos los requisitos de hardware para iOS. Los despliegues manuales también dificultan la gestión de las credenciales de firma, las configuraciones de entorno, el seguimiento de las versiones y la colaboración en equipo. Appflow es la plataforma de DevOps móvil en la nube creada por Ionic. Utilizar un servicio como Appflow para construir aplicaciones React Native no solo proporciona acceso a potentes recursos informáticos, sino que también simplifica el proceso de despliegue al proporcionar un entorno centralizado para gestionar y distribuir tu aplicación en múltiples plataformas. Esto puede ahorrar tiempo y recursos, permitir la colaboración, así como mejorar la confiabilidad y escalabilidad general de una aplicación. En este masterclass, desplegarás una aplicación React Native para su entrega en dispositivos de prueba Android e iOS utilizando Appflow. También aprenderás los pasos para publicar en Google Play y Apple App Stores. No se requiere experiencia previa en el despliegue de aplicaciones nativas, y obtendrás una comprensión más profunda del proceso de despliegue móvil y las mejores prácticas para utilizar una plataforma de DevOps móvil en la nube para enviar rápidamente a gran escala.
Así que has configurado Detox para probar tu aplicación React Native. ¡Buen trabajo! Pero aún no has terminado: todavía hay muchas preguntas que necesitas responder. ¿Cuántas pruebas escribes? ¿Cuándo y dónde las ejecutas? ¿Cómo te aseguras de que hay datos de prueba disponibles? ¿Qué haces con partes de tu aplicación que utilizan APIs móviles que son difíciles de automatizar? Podrías invertir mucho esfuerzo en estas cosas, ¿vale la pena? En esta masterclass de tres horas abordaremos estas preguntas discutiendo cómo integrar Detox en tu flujo de trabajo de desarrollo. Saldrás con las habilidades e información que necesitas para hacer de las pruebas Detox una parte natural y productiva del desarrollo diario. Tabla de contenidos: - Decidir qué probar con Detox vs React Native Testing Library vs pruebas manuales- Configuración de una capa de API falsa para pruebas- Cómo hacer que Detox funcione en CI en GitHub Actions de forma gratuita- Decidir cuánto de tu aplicación probar con Detox: una escala móvil- Integración de Detox en tu flujo de trabajo de desarrollo local Prerrequisitos - Familiaridad con la construcción de aplicaciones con React Native- Experiencia básica con Detox- Configuración de la máquina: un entorno de desarrollo CLI de React Native en funcionamiento que incluye Xcode o Android Studio
Sabemos que React es para la web y React Native es para Android e iOS. Pero ¿has oído hablar de react-native-web? ¡Para escribir una aplicación para Android, iOS y la web en un solo código base! Al igual que React Native abstrae los detalles de iOS y Android, React Native Web también abstrae los detalles del navegador. Esto abre la posibilidad de compartir aún más código entre plataformas. En este masterclass, aprenderás a configurar el esqueleto de una aplicación React Native Web que funcione de manera excelente y se vea increíble. Puedes utilizar el código resultante como base para construir la aplicación que desees, utilizando los paradigmas de React y muchas bibliotecas de JavaScript a las que estás acostumbrado. ¡Te sorprenderá la cantidad de tipos de aplicaciones que realmente no requieren un código base separado para móvil y web! Qué se incluye1. Configuración de navegadores de cajón y de pila con React Navigation, incluyendo la capacidad de respuesta2. Configuración de React Navigation con URLs3. Configuración de React Native Paper, incluyendo el estilo del cajón y los encabezados de React Navigation4. Configuración de un tema de color personalizado que admita el modo oscuro5. Configuración de favicons/iconos de aplicaciones y metadatos6. Qué hacer cuando no puedes o no quieres proporcionar la misma funcionalidad en la web y en el móvil Requisitos previos- Familiaridad con la construcción de aplicaciones con React o React Native. No es necesario conocer ambos.- Configuración de la máquina: Node LTS, Yarn, ser capaz de crear y ejecutar correctamente una nueva aplicación Expo siguiendo las instrucciones en https://docs.expo.dev/get-started/create-a-new-app/
Comments