Módulos Nativos Oxidados para React Native

This ad is not shown to multipass and full ticket holders
React Summit US
React Summit US 2025
November 18 - 21, 2025
New York, US & Online
The biggest React conference in the US
Learn More
In partnership with Focus Reactive
Upcoming event
React Summit US 2025
React Summit US 2025
November 18 - 21, 2025. New York, US & Online
Learn more
Bookmark
Github
Rate this content

Ahora es más fácil que nunca construir y mantener bibliotecas de Rust para React Native, y te mostraré cómo.

Quiero contarte la historia de cómo llegamos aquí en primer lugar, motivar los beneficios de las bibliotecas de Rust en React Native, explicar las dificultades de interoperar entre lenguajes nativos y mostrar cómo la introducción del NAPI binding en Hermes y la nueva herramienta de construcción Ferric, trae las piezas que faltaban para generar automáticamente bindings preconstruidos, seguros y de alto rendimiento de bibliotecas de Rust.

Mi objetivo final con esta charla es inspirarte a construir con Rust en tu próximo proyecto de React Native.

This talk has been presented at React Summit 2025, check out the latest edition of this React Conference.

Kræn Hansen
Kræn Hansen
23 min
17 Jun, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Introducción a Veric, un generador de bindings de Rust para React Native. Perspectivas sobre la construcción de herramientas para desarrolladores, módulos nativos y desafíos de combinar Rust con React Native. Explicación de la interfaz de funciones extranjeras (FFI) y los desafíos del puente C en la integración Rust-RN. Discusión sobre los desafíos con FFI y soluciones alternativas como UniFFI y SaferFFI. Perspectivas sobre Node API como alternativa ABI-segura a JSI y Hermes API, beneficios de los binarios preconstruidos y la herramienta Ferric para bindings de Node API de bibliotecas de Rust. Demostración de Rusty Web Storage para React Native usando Ferric. Construcción de código Rust para plataformas Android y Apple, generación de declaraciones TypeScript y creación de una clase de almacenamiento. Importación, prueba y consumo de un módulo de almacenamiento en Node.js. Introducción a los módulos de Node API de React Native, gestión de bindings de Node API y limitaciones en funciones específicas de tiempo de ejecución y tiempos de construcción de aplicaciones.

1. Insights on Veric and Native Modules

Short description:

Introducción a Veric, un generador de enlaces de Rust para React Native. El ponente Crane, un ingeniero de software senior en MongoDB, comparte ideas sobre la construcción de herramientas para desarrolladores, módulos nativos para React Native y los desafíos de combinar Rust con React Native escrito en C++.

Hola, esta es mi charla sobre Veric, un generador de enlaces de Rust para React Native, módulos de Node API. Y quiero ser muy claro en esto. Lo que verán hoy aquí, funciona. Todavía se está mejorando y apenas funcionó hace unas dos semanas. Así que mientras grabo esta charla, la mayor parte del código aún no está publicado. Y mi esperanza es que lo esté cuando se emita la grabación. Vean esto como una aspiración y una vista previa tecnológica temprana de lo que está por venir.

Primero, mi nombre es Crane. Soy un ingeniero de software senior en MongoDB. Ayudo a construir herramientas para desarrolladores en MongoDB, principalmente compass y aplicaciones GUI basadas en electron para navegar por su base de datos y su clúster de bases de datos. También ayudo a mantener los dispositivos Atlas para cubrir TypeScript, anteriormente conocido como RealmJS. Es mucho código TypeScript, algo de código C++, y soporta múltiples entornos de ejecución sistemas operativos y motores de JavaScript. Y fuera del trabajo, soy un orgulloso padre de dos niñas de seis años y un niño de dos años todos niñas. Y vivo en Rustkilde, al oeste de Copenhague en Dinamarca. Y además de pasar tiempo con mi familia, también trabajo en MongoDB unas 30 horas a la semana. Y fuera de eso, me gusta construir en público. Y para esto, acepto patrocinios en GitHub, especialmente de CoreStack. Y escríbeme en BlueSky si tienes algún comentario. Lo aprecio mucho.

Entonces, ¿por qué me importan los módulos nativos y React Native? He estado luchando con esta bestia durante siete años. Y en el otoño del año pasado, MongoDB decidió reenfocar sus esfuerzos y deprecar la base de datos en la que estaba trabajando. Tengo mucho costo hundido en el espacio del problema, en React Native y en nuestra comunidad. Y me siento obligado a compartir mis aprendizajes de mi tiempo construyendo este SDK. A medida que también surgen oportunidades para crear nuevos módulos nativos para React Native, soy consciente de que nunca quiero escribir y depurar un enlace manual nuevamente. Y si es posible, me encantaría construir para la menor cantidad de motores de JavaScript posible. Vamos a sumergirnos en Rust. Entonces, ¿qué hace que sea difícil combinar React Native, que está escrito en C++ con una biblioteca de Rust? Primero, sus disposiciones de datos no coinciden automáticamente. Y muchos de los conceptos no se trasladan entre Rust y C++. Aquí hay un par de ejemplos de cómo no son compatibles. Y terminas bajando al denominador común más bajo cuando te comunicas entre los dos.

2. Challenges with FFI and C Bridge

Short description:

Explicación de la foreign function interface (FFI) y el puente C en la integración de Rust-RN, destacando los desafíos con el puente C y el uso de JSI.

Llamamos a esto la foreign function interface a menudo, o también a veces se refiere como un puente C. Y este es un ejemplo de esto. Hice un diagrama aquí que representa la secuencia de llamadas entre componentes. Como esta es la arquitectura más utilizada al envolver una biblioteca de Rust en un módulo Turbo de React Native.

Cuando se carga el módulo Turbo, llama al motor de JavaScript a través de JSI para exponer sus funciones nativas a través del código JavaScript de la aplicación, ya sea a través de la función host o la abstracción de objeto host proporcionada por JSI. Después de esta inicialización, el JavaScript puede llamar al módulo Turbo. Y en este ejemplo, la aplicación llama a get item pasando una cadena. Y este código, básicamente llama a través de la función host en el C++, que luego llama al código de la biblioteca real a través del puente C.

Y observe aquí cómo el puente C es específico del dominio. Tiene esta llamada a get item. No está abstraído. Es como un lenguaje muy concreto de la biblioteca, lo cual es una tarea difícil de implementar y probar como autor de la biblioteca, este puente C, este puente C personalizado. Y debido a que el consumidor del puente C, se registra en la aplicación usando JSI, que no es ABI seguro. Esto no se puede poner en un preconstruido de manera confiable. Así que tienes que compilar esto en la máquina del desarrollador de la aplicación.

3. Challenges with Rust-RN FFI Solutions

Short description:

Discusión sobre los desafíos con FFI en la integración de Rust-RN y soluciones alternativas como UniFFI y SaferFFI para una mejor experiencia del desarrollador.

Y también observe que mientras el módulo Turbo implementa una especificación generada por código, su implementación interna y la forma en que llama al puente C, es seguro en cuanto a tipos, pero podría estar usando y llamando incorrectamente, lo cual es también otro problema potencial. Y esto se debe a que llamar desde bibliotecas de Rust a C++ y con estos y al revés, rápidamente se vuelve muy complicado y propenso a errores, especialmente para tipos de datos complejos, como structs y cosas con objetos con tiempos de vida, referencias a objetos con tiempos de vida. Y a menudo es repetitivo, verboso. Hay muchas buenas razones por las que nos gusta escribir código en un lenguaje de nivel superior. Y a menudo conduce a fugas de memoria y fallos en tiempo de ejecución porque la gestión de memoria como hacerlo manualmente y también el código consciente del tiempo de vida de los objetos, es muy difícil de escribir de una buena manera. Creo que básicamente, es como un punto interminable de frustración y dolor y potencialmente será ilegal en el futuro también. Así que no es muy divertido depurar estas cosas, escribirlas o depurarlas. Y aquí está mi dolor de corazón, si C es alguna vez parte de tu proyecto, debería ser generado y considerado efímero, una especie de representación intermedia. Y no debería haber necesidad de comprometer esto en tu repositorio si se puede evitar.

Entonces, ¿cuáles son las alternativas a esto? Así que la primera alternativa que quiero mencionar es UniFFI de Mozilla. Puedes usar esto para aliviar el dolor o al menos parte del dolor. Presenta múltiples lenguajes de destino. Así que React Native siendo uno de ellos. Y está optimizado para un amplio soporte de plataformas de destino y utiliza mucho de marshalling y copia de datos para lograr eso. Favorece la facilidad de implementación y comprensión sobre el rendimiento como escriben en su propia documentación. Y este podría ser el compromiso adecuado para ti. Mientras estaba construyendo una prueba de concepto para un binding UniFFI para el auto-merge trade en diciembre, noté el código rush que necesitaba escribir allí para básicamente prepararlo para ser expuesto de esta manera era considerablemente, era el más, había mucho código que necesitaba escribir para exponerlo de una manera confiable.

Otra alternativa es SaferFFI de Dido, y está mejorando la experiencia del desarrollador de mantener una interfaz de función extranjera o ZBridge. Es usado y mantenido por Dido, como dije, en esta solución de sincronización peer-to-peer local first. Y ayuda a deducir bloques seguros, lo siento, ayuda a reducir los bloques inseguros en tu código rush y genera un encabezado C para el consumidor, pero el lado consumidor del puente aún necesitas implementarlo y mantenerlo manualmente. Y en el contexto de la estabilidad ABI y React Native, también podrías haber oído hablar del Hermes ABI. Es un ABI estable experimental basado en C para Hermes. Así que en la superficie, exactamente lo que necesitamos, pero no es realmente para consumo general. Y en sus propias palabras, no resuelve inmediatamente la estabilidad ABI para bibliotecas nativas dirigidas a React Native. Así que no React Native en sí, sino las bibliotecas que se construyen sobre él. Y esto se debe a que las bibliotecas aún consumirán un puntero de tiempo de ejecución C++ JSI proporcionado por React Native y no Hermes. Y el equipo de Hermes es consciente de esto, y está dentro del alcance de sus esfuerzos para resolver esto eventualmente. Hasta que esté listo, creo que tenemos otras y más, en mi opinión, mejores alternativas disponibles. Así que esto sucedió en el React Summit US el año pasado. Al final del año, estaba presentando una charla sobre la construcción de módulos nativos C++ JSI para React Native.

4. Node API as ABI-Safe Alternative

Short description:

Perspectivas sobre Node API como alternativa ABI-segura a JSI y Hermes API, beneficios de los binarios preconstruidos y la herramienta Ferric para enlaces de Node API de bibliotecas Rust.

Y mientras hacía eso, Jamie Burch también dio una charla sobre el estado de los complementos nativos de Node API en React Native. Recomiendo encarecidamente ver esta charla. Y cuando lo hice, algo hizo clic para mí. Entonces, ¿por qué estoy tan entusiasmado con estos módulos de Node API? ¿Y por qué lo estaba Jamie? Bueno, es porque es una alternativa ABI segura a JSI y la API de Hermes que mencioné antes. Y es una API basada en C, y también tiene un envoltorio de C++ de nivel superior, al igual que JSI sería para la API de Hermes. Y hay una comunidad próspera de ecosistemas existentes. Lo siento, hay un ecosistema próspero de herramientas y entornos de ejecución y bibliotecas disponibles para Node API. Está adoptado por Node.js en sí, por supuesto, pero también por otros entornos de ejecución como Deno, Bon, Electron y más. Y React Native para Windows ya usa esto en su bifurcación de Hermes. Así que si tú, como autor de una biblioteca, deseas admitir múltiples entornos de ejecución de JavaScript más allá de React Native, o ya tienes este enlace de Node API escrito, entonces no necesitas dedicar tiempo también a escribir y mantener un enlace JSI. Y ya existen muchos generadores de enlaces que exponen código nativo a través de llamadas de función generadas de Node API.

Y uno de mis favoritos personales aquí es que es trivial probar un enlace sin iniciar un simulador. Puedes simplemente ejecutar el proceso de Node.js con un dash dash test para ejecutar un proceso de Node.js consumiendo la biblioteca dinámica de Node API que construyes. Así que el ABI estable aquí, que es proporcionado por Node API, permite la distribución de tu biblioteca como un binario preconstruido. ¿Y qué significa esto? Bueno, es un gran beneficio para tus usuarios porque no necesitan esperar a que tu código se compile. Y también significa que no tendrán que experimentar y reportar errores de compilación nativa cuando cometas un error. Y también impone menos restricciones en su entorno ya que no tienen que lidiar con todas las elecciones que haces en torno a las herramientas que necesitas para construir tu biblioteca.

Entonces, ¿cómo logras esto? ¿Cómo preconstruyes y generas un enlace de Node API para tu biblioteca de Rust? Y de esto se trata la siguiente parte de mi presentación. Se trata de Ferric. Ferric es este envoltorio bastante simple alrededor de algunas otras herramientas. Y lo expliqué como siendo una parte, básicamente está compuesto de tres partes diferentes. Así que basado en macros de Rust con las que anotas tu código, esto genera un código de enlace de Node API de bajo nivel. Y este código básicamente llama a funciones de Node API por ti. Esto es proporcionado por NAPI-RS, el proyecto. Es un proyecto diferente que Ferric utiliza para lograr esto. Esto también genera declaraciones de TypeScript para tu biblioteca, que coinciden con la API de JavaScript resultante que se produce cuando se llaman estas funciones de Node API. En segundo lugar, la herramienta Ferric impulsará el compilador de Rust para construir bibliotecas dinámicas para cada una de las plataformas solicitadas y arquitecturas mientras estás preconstruyendo. Y finalmente, estas bibliotecas dinámicas se combinarán y empaquetarán en preconstrucciones, que son consumibles por React Native, Node API, y de lo que voy a hablar más adelante también. Estos son básicamente marcos XG cuando estás apuntando a Apple y directorios similares a JNI, Libs. Estos directorios donde tienes subdirectorios específicos de arquitectura y luego los archivos de objetos compartidos dentro de ellos cuando estás apuntando a Android.

5. Rusty Web Storage Demo

Short description:

Demo of Rusty Web Storage para React Native usando Ferric, incluyendo una estructura de almacenamiento simple con funciones básicas y anotaciones NAPI.

Bien, es hora de una demo aquí. Construí esto llamado Rusty Web Storage. Es una implementación muy simple, pero básicamente envuelve esta API de almacenamiento, la API de almacenamiento local o de sesión proporcionada por un navegador web. Ahora queremos, como ejemplo, enviar esto para React Native. Y la forma en que lo hice es básicamente configurar un paquete aquí, Rusty Web Storage con un archivo package.json declarando la dependencia de la herramienta de construcción Ferric. También tiene un archivo Cargo.toml que establece la versión de Node API que utiliza. Declara que quiere compilar o construir como una biblioteca dinámica C, y también declara una dependencia de NAPI-RS, el crate que usamos para generar código. También tiene un conjunto de pruebas escrito contra el ejecutor de pruebas de Node.js, y tiene la implementación aquí en un archivo Rust.

El archivo Rust aquí es básicamente un poco de preámbulo. En este caso, solo tenemos esta estructura de almacenamiento. Es un hash map simple, así que todo está en memoria. Podría persistir, podría cifrar otras características. Podríamos agregar a esto, pero solo por simplicidad, solo estamos almacenando valores en un hash map. Y exponemos esto usando, en este caso, lo llamamos jsStorage. Y le damos un nombre diferente aquí. Cuando usamos la macro NAPI aquí, también proporcionamos un jsName para lo que se supone que debe ser el nombre cuando se genera el código JavaScript. Sí, así que internamente, tiene una referencia a este objeto de almacenamiento interno. La implementación de esto, nuevamente, la anotamos con la anotación NAPI aquí, o la macro.

Y aquí anotamos la nueva función como un constructor de NAPI. Sí, y es bastante simple. Luego implementamos los diferentes miembros esperados por la, o descritos en la especificación para el almacenamiento web. Aquí, una longitud para obtener todos los, como cuántos valores hay en el almacenamiento. Una función mutable aquí para básicamente limpiar el almacenamiento. Algo para obtener el elemento por clave. Algo aquí para obtener la clave de la enésima entrada en el almacenamiento. Esto se usa cuando generas sobre el almacenamiento. Luego hay algo aquí para eliminar una clave y finalmente para establecer una clave desde un, perdón, establecer un valor desde una clave. Bien, eso es todo. Y lo que haces entonces es básicamente ejecutar la herramienta de construcción Ferric aquí. Puedes ver que generamos para todos los diferentes objetivos.

6. Construcción de Código Rust para Plataformas Android y Apple

Short description:

Construcción de código Rust para plataformas Android y Apple, generando declaraciones de TypeScript y puntos de entrada, y creando una clase de almacenamiento que coincide con las especificaciones web.

Generamos las declaraciones de TypeScript. También generamos el punto de entrada. Es un archivo JavaScript. Construimos este directorio lib de Android. Y también combinamos algunas bibliotecas Darwin en una biblioteca universal. Y finalmente empaquetamos el marco NXE. Así que este es un comando que construye para Android y Apple desde el código Rust que acabas de ver. Y también genera el punto de entrada y las declaraciones de TypeScript.

Y aquí abajo, puedes ver debajo de la línea aquí, puedes ver todas las cosas que son artefactos de construcción efímeros. Primero el punto de entrada aquí, solo contiene una llamada require del nodo, el pre-construido que fue construido. Y el pre-construido aquí es solo una biblioteca dinámica regular construida para Node.js. Pero como un archivo hermano para que tengamos el Android.node aquí en los pre-construidos de Android, las cosas que están dirigidas a Android. Así que aquí es donde se colocarán los archivos de objeto compartido destinados a Android y las arquitecturas específicas de Android.

Y luego también tenemos este marco XG renombrado para iOS y macOS y otros como el simulador y lo que sea que esté pre-construido aquí. Bien, así que el punto de entrada es bastante simple. Es solo esta llamada require y la parte DTS aquí, el archivo de declaración de TypeScript. Puedes ver aquí, básicamente genera una clase, una clase de almacenamiento con un constructor y la propiedad length y o el getter aquí y luego todas las diferentes funciones que esperarías. Así que esto coincide con la especificación web. Y esto se genera completamente desde el código rush. También mencioné este archivo de prueba aquí que está escrito contra la API del ejecutor de pruebas de Node.js.

7. Consumo y Pruebas de Rusty Web Storage en Node.js

Short description:

Importando, probando y consumiendo un módulo de almacenamiento en Node.js, incluyendo funcionalidades como establecer valores, borrar valores e iterar sobre elementos de almacenamiento.

Aquí puedes ver que simplemente estamos importando el storage de nuestro paquete. Y esperamos que exporte una función como una función constructora aquí. Se puede construir. Puede establecer y obtener valores. Puede devolver null si falta una clave. Así que estas son como pruebas que podemos ejecutar. Tiene una longitud. Puede borrar todos los valores. Todas estas cosas son pruebas que podemos ejecutar en Node.js para ejercitar el módulo que creamos. Y también construí una aplicación de prueba en este caso. Esta es una aplicación Expo que consume este rusty web storage.

Y puedes ver aquí, hay una grabación de pantalla en el lado derecho de mí escribiendo y usando esta biblioteca. Básicamente, solo la estoy importando, inicializándola. Y luego aquí hay algo de gestión de estado alrededor de las pulsaciones de teclas. Entrada de texto aquí. Puedes ver aquí en el handle submit, hacemos storage set item, que es parte de la API que acabamos de implementar. Y puedes ver que tenemos un clear, el storage clear aquí cuando borras los elementos cuando presionas el botón aquí también. Y luego tenemos una iteración, como una forma de iterar sobre todos los valores posibles dentro del storage. Y también usamos el storage. Aquí, puedes ver que usamos la clave, la clave final, y también obtenemos el elemento basado en eso. Y luego también tenemos este código aquí donde eliminamos un elemento cuando haces clic en un icono de papelera a la derecha del valor.

Bien, como desarrollador de aplicaciones, lo que necesitas hacer para consumir esto, necesitas instalar el paquete React Native Node API modules. Y voy a entrar en eso. Y luego instalas la biblioteca. Luego haces pod install, o construyes tu proyecto Gradle. Y tienes que agregar un plugin de Babel a tu archivo de configuración de Babel. También voy a explicar por qué se necesita eso. Y finalmente, consumes el paquete como lo desees. Bien, entonces, ¿por qué necesitas esas cosas? Es porque hasta ahora he estado hablando de Ferric, pero como si React Native ya supiera cómo cargar Node API modules. Y esto, sin embargo, no es el caso.

8. Introduction to React Native Node API Modules

Short description:

Introducción a los módulos de React Native Node API y el paquete host para gestionar los enlaces de Node API. Exploración de la secuencia de llamadas al usar Rusty web storage como un módulo de Node API y el cambio de puenteo manual en C a consumo de Node API. Las limitaciones incluyen funciones específicas de tiempo de ejecución incompletas y tiempos de construcción iniciales de la aplicación lentos debido a la compilación de Hermes y React Native desde la fuente.

Una parte importante del propietario de Fabric, perdón, no Fabric, Ferric siendo tan simple es el hecho de que la comunidad está trabajando en llevar módulos de Node API a React Native. Y esto es exactamente de lo que voy a hablar ahora. En el centro de todo de estos módulos de React Native Node API, tenemos este paquete host, lo llamamos. Lo llamamos host porque aloja los módulos de Node API. Viene con un Node API débil preconstruido para que las bibliotecas se vinculen contra él al preconstruirse ellas mismas. Y descarga una versión especial de Hermes con soporte para Node API. Descubre automáticamente y vincula estos enlaces de Node API, y coincide, que coinciden con esta especificación preconstruida, las gni-libs y los marcos XG de los que hablé antes. Y también, todo este paquete implementa un turbo módulo con una función requireNodeAddOn responsable de cargar las bibliotecas dinámicas preconstruidas y proporcionar las funciones de Node API a estos módulos. Y también inicializa un por módulo por tiempo de ejecución JSI, entorno Node API, también conocido como el nappyenv. Y finalmente, el paquete host exporta este plugin de Babel, que los desarrolladores de aplicaciones usan para transformar llamadas require para archivos .node en llamadas requireNodeAddOn.

Ahora veamos la secuencia de llamadas al cargar e inicializar y llamar a nuestra biblioteca Rusty web storage construida como un módulo de Node API. La aplicación requiere el preconstruido, que se registra e inicializa a sí mismo usando Node API, que la aplicación puede llamar, después de lo cual la aplicación puede llamar a la función getItem, que llama directamente a la biblioteca usando convenciones de llamada de Node API. Y nota cómo el FFI ahora se ha invertido en comparación con el puenteo manual en C. Ya no hay una biblioteca. Ya no es la biblioteca proporcionando la API de C. Ahora está consumiendo el Node API en su lugar. Así que el puente C ahora es genérico. Y esto significa que los nombres y conceptos ya no son específicos al dominio de la biblioteca. Y esto es enorme porque podemos invertir en hacer esto súper bien implementado y probado de una vez por todas.

Entonces, ¿cuáles son las limitaciones aquí? Mencioné al principio que esto es temprano y hay algunas limitaciones que se aplican. Mientras grabo esto, solo algunas de las funciones específicas de tiempo de ejecución de Node API están implementadas. Toda la manipulación de objetos y funciones de JavaScript funciona, pero el código asincrónico como futuros y promesas, no. Y el soporte de Hermes para Node API es un PR abierto, en el que se está trabajando activamente, pero aún no se ha fusionado. Esto significa que el tiempo de construcción inicial de la aplicación será lento porque básicamente estás compilando Hermes y React Native desde la fuente, y hay requisitos muy específicos sobre la versión de React Native que puedes usar. Y si piensas que algo de esto es interesante, por favor háznoslo saber y deja que otras personas también lo escuchen, porque necesitamos tu ayuda para mantener el impulso aquí. OK, no estoy solo en esto. Nada de esto sería posible sin la ayuda y la participación activa de nuestra increíble comunidad. Aquí hay algunos nombres de personas con las que me he estado reuniendo semanalmente desde enero, y probablemente también olvide mencionar a algunos, pero también me encantaría extender mi gratitud a mi empleador, MongoDB, y también al equipo de Callstack. Muchas gracias por su tiempo y atención. Es una mercancía rara estos días, y espero verte en persona. Por favor, detente y dime si encuentras algo de esto interesante, si me encuentras en persona. Adiós.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Elevando el Listón: Nuestro Viaje Haciendo de React Native una Opción Preferida
React Advanced 2023React Advanced 2023
29 min
Elevando el Listón: Nuestro Viaje Haciendo de React Native una Opción Preferida
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.
Llevando los Componentes del Servidor React a React Native
React Day Berlin 2023React Day Berlin 2023
29 min
Llevando los Componentes del Servidor React a React Native
Top Content
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.
Herramienta Multiplataforma de React Native Kotlin
React Day Berlin 2022React Day Berlin 2022
26 min
Herramienta Multiplataforma de React Native Kotlin
Top Content
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.
“Microfrontends” para móviles en React Native
React Advanced 2023React Advanced 2023
24 min
“Microfrontends” para móviles en React Native
Top Content
Micro frontends are an architectural style where independent deliverable frontend applications compose a greater application. They allow for independent development and deployment, breaking down teams into feature verticals. React Native's architecture enables updating the JavaScript layer without going through the app store. Code Push can be used to deploy separate JavaScript bundles for each micro frontend. However, there are challenges with managing native code and dependencies in a micro frontend ecosystem for mobile apps.
Construyendo Bibliotecas de Componentes Multiplataforma para Web y Nativo con React
React Advanced 2021React Advanced 2021
21 min
Construyendo Bibliotecas de Componentes Multiplataforma para Web y Nativo con React
Top Content
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.

Workshops on related topic

Presentando FlashList: Construyamos juntos una lista performante en React Native
React Advanced 2022React Advanced 2022
81 min
Presentando FlashList: Construyamos juntos una lista performante en React Native
Top Content
Featured Workshop
David Cortés Fulla
Marek Fořt
Talha Naqvi
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
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
React Summit 2022React Summit 2022
117 min
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
Top Content
Workshop
Yevheniia Hlovatska
Yevheniia Hlovatska
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
Cómo construir una animación interactiva de “Rueda de la Fortuna” con React Native
React Summit Remote Edition 2021React Summit Remote Edition 2021
60 min
Cómo construir una animación interactiva de “Rueda de la Fortuna” con React Native
Top Content
Workshop
Oli Bates
Oli Bates
- 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
Despliegue de aplicaciones React Native en la nube
React Summit 2023React Summit 2023
88 min
Despliegue de aplicaciones React Native en la nube
WorkshopFree
Cecelia Martinez
Cecelia Martinez
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.
Pruebas Efectivas con Detox
React Advanced 2023React Advanced 2023
159 min
Pruebas Efectivas con Detox
Workshop
Josh Justice
Josh Justice
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
Creación para Web y Móvil con Expo
React Day Berlin 2022React Day Berlin 2022
155 min
Creación para Web y Móvil con Expo
Workshop
Josh Justice
Josh Justice
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/