Cómo compartir código entre una aplicación web de React y una aplicación móvil de React Native en Monorepo

Rate this content
Bookmark

Por lo general, crear aplicaciones web y móviles requiere diferentes conjuntos de tecnologías, y es bastante difícil compartir código. Esta charla mostrará cómo agregué una aplicación web de React y una aplicación móvil de React Native en el mismo monorepo utilizando Nx, y cómo optimicé el intercambio de código entre la aplicación web de React y la aplicación móvil de React Native.

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

FAQ

Emily es una desarrolladora en Toronto que actualmente trabaja para una empresa llamada Narwhal IO. Anteriormente, fue desarrolladora nativa de iOS y ahora se dedica al desarrollo web. Tiene experiencia en compartir código entre aplicaciones web de React y aplicaciones móviles de React Native.

Emily busca resolver el desafío de crear tanto una aplicación web como una versión móvil que compartan la misma lógica de negocio y funciones, utilizando una única base de código a pesar de las diferencias entre plataformas web y móviles.

Emily utiliza NX, una herramienta de Monorepo, para configurar y manejar tanto aplicaciones Rack (React) como Rack Native (React Native), facilitando el compartir código y mantener la paridad de funciones entre ambas plataformas.

Para crear un espacio de trabajo NX, Emily sugiere utilizar el comando 'NPX create new workspace', nombrar el espacio de trabajo, elegir React como el complemento predeterminado y configurar las aplicaciones dentro de este espacio.

Una biblioteca compartida en NX es un módulo que permite compartir código, como constantes o lógica de negocio, entre diferentes aplicaciones dentro del mismo espacio de trabajo. Esto ayuda a mantener la consistencia y eficiencia al desarrollar aplicaciones múltiples que requieren funcionalidades comunes.

Emily demuestra la integración creando una biblioteca llamada 'constants' y utilizando una variable de esta biblioteca tanto en la aplicación web como en la móvil. Verifica la correcta implementación observando los cambios en ambas aplicaciones y utilizando el comando 'nx graph' para visualizar las dependencias.

Emily Xiong
Emily Xiong
7 min
20 Jun, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Esta presentación se centra en compartir código entre aplicaciones web de React y aplicaciones móviles de React Native. El orador demuestra cómo lograr la paridad de funciones utilizando un Monorepo con NX. Destacan la importancia de compartir código no relacionado con la interfaz de usuario, como la lógica empresarial y la gestión del estado, a través de bibliotecas compartidas. Este enfoque permite que las aplicaciones se centren en el código de la interfaz de usuario mientras mantienen separado el código no relacionado con la interfaz de usuario. Para obtener más detalles, consulte la publicación del blog del orador.

1. Introducción a CodeShare y NX

Short description:

Bienvenidos a mi presentación sobre cómo compartir código entre aplicaciones web de React y aplicaciones móviles de React Native. Les guiaré a través de mi experiencia en la construcción de aplicaciones web y móviles utilizando CodeShare. Explicaré los desafíos de utilizar diferentes pilas tecnológicas y cómo logro la paridad de funciones utilizando Monorepo con NX. Comencemos con una demostración rápida creando un espacio de trabajo NX llamado Rack Summit con la aplicación de React llamada Web.

Hola a todos. Bienvenidos a mi presentación. Mi tema es cómo compartir código entre las aplicaciones web de React y las aplicaciones móviles de React Native. Primero, permítanme presentarme. Mi nombre es Emily. Soy una desarrolladora en Toronto y actualmente trabajo para una empresa llamada Narwhal IO. Me gusta hacer senderismo, andar en bicicleta, hacer kayak y todas las actividades al aire libre. Voy a correr una media maratón en octubre de este año, así que me estoy preparando casi todos los fines de semana. Además, solía ser una desarrolladora nativa de iOS, pero eso fue hace mucho tiempo. Afortunadamente, ahora me dedico al desarrollo web. Esta presentación los llevará a través de mi experiencia en la construcción de una aplicación web y móvil utilizando CodeShare. El problema que intento resolver es que tengo esta idea increíble. No solo quiero crear una aplicación web, sino que también quiero crear una versión móvil de la aplicación. Sin embargo, los usuarios esperan experiencias diferentes en la web y en el móvil. Por supuesto, no voy a utilizar el enfoque nativo de iOS y Android porque eso requeriría demasiadas pilas tecnológicas. Naturalmente, elegí Rack y Rack Native como mi pila tecnológica. Sin embargo, todavía hay algunos desafíos. Rack y Rack Native son dos pilas tecnológicas diferentes, el código de la interfaz de usuario es completamente diferente. Rack Native utiliza componentes nativos en lugar de componentes web como base de construcción. Sin embargo, todavía quiero lograr la paridad de funciones, es decir, quiero que la aplicación móvil y la aplicación web tengan las mismas funciones y compartan la misma lógica de negocio. La solución para esto es definitivamente Monorepo. Pero, ¿cuál? La solución que se me ocurrió, no sorprendentemente, es NX. ¿Qué es NX? NX es una poderosa herramienta de Monorepo que configurará las aplicaciones Rack y Rack Native por ustedes, listas para usar. Hagamos una demostración rápida. Primero, creemos un espacio de trabajo NX. En la terminal, ingresen NPX create new workspace. Para este ejemplo, voy a nombrar el espacio de trabajo Rack Summit. Usaré React como el complemento predeterminado y nombraré la aplicación como Web.

2. Compartiendo Código No-UI con Bibliotecas Compartidas

Short description:

Después de instalar los paquetes necesarios y generar la aplicación móvil, exploré el gráfico de dependencias del proyecto. Luego creé una biblioteca compartida llamada 'constants' e la importé tanto en las aplicaciones web como en las móviles. Al compartir código no relacionado con la interfaz de usuario, como la lógica de negocio y la gestión del estado, podemos lograr la paridad de funciones y evitar duplicar código. Esta configuración permite que las aplicaciones se centren en el código de la interfaz de usuario mientras mantienen el código no relacionado con la interfaz de usuario en bibliotecas separadas. Para obtener más detalles, consulta mi publicación en el blog.

Luego de instalar todo, permítanme entrar en esta carpeta de espacio de trabajo e instalar Ahora o el paquete Rack Native. Luego, ingresen el comando para generar una aplicación Rack Native. Nombraré esta aplicación como 'mobile'.

Si abro la carpeta del espacio de trabajo Rack Summit, en las aplicaciones, actualmente hay cuatro carpetas. Tiene la aplicación web y la aplicación móvil que acabo de crear y las carpetas E2E. Si ingreso 'nx serve web', se ejecutará la aplicación web predeterminada de Rack. Mientras tanto, para ejecutar la aplicación móvil, en la terminal, ingreso el comando 'nx run os'. En otra terminal, ingreso 'nx run android'. Esto ejecutará las aplicaciones de iOS y Android en sus respectivos simuladores.

Ahora veamos el gráfico de dependencias. En la terminal, ingresen 'nx graph'. Al ingresar 'nx graph', debería ver el gráfico de dependencias de este proyecto. Observen que no hay nada compartido entre las aplicaciones web y mobile apps.

Luego, creemos una biblioteca compartida. En la terminal, ingresen el comando 'nx generate lib'. Para este ejemplo, la llamaré 'constants'. En la carpeta 'libs', ahora debería ver una carpeta llamada 'constants' que se ha creado. Dentro del archivo 'index.ts', crearé una variable constante llamada 'title'.

Luego, vayamos a la carpeta de la aplicación web. Primero, importaré la variable 'title' desde la biblioteca 'constants'. Después de eso, pasaré la constante 'title' a la propiedad 'title'. Si vuelvo a ejecutar la aplicación web, debería notar que el título ha cambiado. Lo mismo ocurre con la aplicación móvil. También debería poder importar desde la biblioteca compartida y cambiar el título para que provenga de esta biblioteca.

Si abro el gráfico de dependencias nuevamente, debería ver que tanto la aplicación móvil como la web importan desde esta biblioteca 'constants'. Compartir una variable constante no parece ser muy útil. Sin embargo, imaginen qué se podría compartir o qué código no relacionado con la interfaz de usuario se podría compartir. Por ejemplo, la lógica de negocio y la gestión del estado. De esta manera, se garantiza la paridad de funciones para las mismas características, los desarrolladores no necesitan implementar la misma lógica dos veces. Solo necesita existir una vez dentro de una biblioteca compartida.

En esencia, con la ayuda de Next, la configuración del proyecto se vería así. Para las aplicaciones, solo contienen código de la interfaz de usuario. Para el código no relacionado con la interfaz de usuario, podríamos crear bibliotecas para eso. Para obtener más información, pueden consultar mi publicación en el blog enlazada en la parte inferior de la página. Fin. Gracias por escuchar.

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

Un Marco para Gestionar la Deuda Técnica
TechLead Conference 2023TechLead Conference 2023
35 min
Un Marco para Gestionar la Deuda Técnica
Top Content
Today's Talk discusses the importance of managing technical debt through refactoring practices, prioritization, and planning. Successful refactoring requires establishing guidelines, maintaining an inventory, and implementing a process. Celebrating success and ensuring resilience are key to building a strong refactoring culture. Visibility, support, and transparent communication are crucial for addressing technical debt effectively. The team's responsibilities, operating style, and availability should be transparent to product managers.
Luchando contra la Deuda Técnica con la Refactorización Continua
React Day Berlin 2022React Day Berlin 2022
29 min
Luchando contra la Deuda Técnica con la Refactorización Continua
Top Content
This Talk discusses the importance of refactoring in software development and engineering. It introduces a framework called the three pillars of refactoring: practices, inventory, and process. The Talk emphasizes the need for clear practices, understanding of technical debt, and a well-defined process for successful refactoring. It also highlights the importance of visibility, reward, and resilience in the refactoring process. The Talk concludes by discussing the role of ownership, management, and prioritization in managing technical debt and refactoring efforts.
De Monolito a Micro-Frontends
React Advanced 2022React Advanced 2022
22 min
De Monolito a Micro-Frontends
Top Content
Microfrontends are considered as a solution to the problems of exponential growth, code duplication, and unclear ownership in older applications. Transitioning from a monolith to microfrontends involves decoupling the system and exploring options like a modular monolith. Microfrontends enable independent deployments and runtime composition, but there is a discussion about the alternative of keeping an integrated application composed at runtime. Choosing a composition model and a router are crucial decisions in the technical plan. The Strangler pattern and the reverse Strangler pattern are used to gradually replace parts of the monolith with the new application.
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.

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
WorkshopFree
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
WorkshopFree
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
Llevando tu aplicación web a nativa con Capacitor
JSNation 2023JSNation 2023
111 min
Llevando tu aplicación web a nativa con Capacitor
WorkshopFree
Mike Hartington
Mike Hartington
Entonces, tienes una increíble aplicación web que has construido y quieres llevarla de tu navegador web a la App Store. Seguro, hay muchas opciones aquí, pero la mayoría requerirá que mantengas aplicaciones separadas para cada plataforma. Quieres que tu código base sea lo más cercano posible en la Web, Android e iOS. Afortunadamente, con Capacitor, puedes tomar tu aplicación web existente y crear rápidamente aplicaciones nativas para iOS y Android para distribuir en tu App Store favorita.
Contenido: Este masterclass está dirigido a desarrolladores principiantes que tienen una aplicación web existente o están interesados en el desarrollo móvil. Repasaremos:- ¿Qué es Capacitor?- ¿Cómo se compara con otras soluciones multiplataforma?- Usando Capacitor para construir una aplicación nativa utilizando tu código web existente- Organizando nuestra aplicación para su distribución en tiendas de aplicaciones móviles con convenciones de nombres, iconos, pantallas de inicio y más