Entonces, en cierto sentido, cuando estás construyendo, y esto es solo una simplificación para React Native, cuando estás construyendo una aplicación de React Native, tienes tu aplicación aquí en esta caja azul que se ejecuta dentro de un tiempo de ejecución de JavaScript. Podría ser V8, algo más. Pero esencialmente, eso está ejecutando tu JavaScript, y ese tiempo de ejecución se comunicará a través de una capa de puente. Cada vez que esa capa de puente intenta acceder a las funciones del dispositivo, se va a comunicar con las funciones reales del dispositivo, obtener los resultados, serializar eso a JSON y luego devolver eso al tiempo de ejecución de JavaScript y eso se enviará de vuelta a tu aplicación.
A medida que se evalúa la interfaz de usuario, la capa de puente también se comunicará con el tiempo de ejecución nativo y renderizará todos los controles esencialmente sobre la marcha. Así que todos los elementos de la interfaz de usuario, los botones, las tarjetas, la navegación por pestañas, se están renderizando internamente a través de React Native. Y esta es en realidad una infraestructura bastante similar a otros proyectos. No es específico de React Native, así que no asumas eso. Hay una arquitectura muy similar a Cordova aquí. La única diferencia es que en lugar de un tiempo de ejecución de JavaScript, es un ecosistema de navegador completo, y separamos el proceso de renderizado y simplemente usamos el navegador para renderizar. Así que estas son arquitecturas muy similares.
Y esto es un poco mi propia opinión personal al respecto, donde se descompone un poco es tener esta idea de tener que aprender una nueva sintaxis que no es esencialmente lo mismo que has aprendido para el desarrollo web. Tener que aprender cómo volver a hacer etiquetas h1, h2, párrafos, enlaces es un poco frustrante. Entiendo por qué lo hicieron, pero es otra cosa más que aprender. Si tienes una aplicación web existente que estás tratando de llevar al tiempo de ejecución nativo o a las tiendas nativas, lamentablemente tendrás que reescribir esa aplicación para que sea compatible con este tiempo de ejecución de React Native. Algunas personas lo harán y dirán que está bien, pero sigue siendo una sensación frustrante. Y finalmente, si hay una biblioteca de terceros que realmente te gusta, si no admite React Native de forma nativa, no puedes usarla. Tengo una de mis bibliotecas favoritas que se llama fill.js, que es un editor de texto enriquecido. No puedes usarlo en React Native debido a cómo está construido y cómo funciona. Tienes que encontrar uno específico para React Native para que funcione en una aplicación de React Native, lo cual no parece correcto, en mi opinión.
Sí, lo mencioné antes, pero la idea de que sea verdaderamente nativo es un poco engañosa. Arquitectónicamente, todavía se ejecuta JavaScript, los controles se renderizan sobre la marcha, esencialmente hay un agente de renderizado personalizado. Este último punto para aquellos interesados en Flutter, esto es algo con lo que debes lidiar, el renderizado no está realmente renderizando controles nativos, está renderizando cosas en el sentido más amplio en un lienzo. Y luego estás interactuando y volviendo a implementar todas las interacciones nativas. Tómalo como quieras, es simplemente un hecho. Siguiendo adelante, ¿cuáles son las otras opciones aquí? Idealmente, queremos algo que combine el ciclo de vida del desarrollo nativo, pero que aún esté muy en esta mentalidad de desarrollador web donde solo estoy escribiendo HTML, CSS y JavaScript. Puedo llevar no solo React, sino cualquier framework a mi conjunto de herramientas y puedo enviar lo que quiera. Así que eso es en lo que nos enfocaremos hoy, y eso es Capacitor.
Entonces, en un tiempo de ejecución, Capacitor es un tiempo de ejecución nativo y una biblioteca de JavaScript. Es, en primer lugar, una forma de importar paquetes que proporcionan acceso a las funciones nativas del dispositivo. Similar a Cordova en ese sentido. Excepto que cada paquete en sí mismo permite envolver varias API diferentes y veremos cómo funciona eso. Las API con las que interactúas como desarrollador están simplificadas. De esta manera, tienes una forma particular de acceder al sistema de archivos y luego los paquetes con los que interactuarás saben cómo enviar esas opciones y llamar a ciertos métodos que se ajustan a iOS o Android. Y cuando quieres incluir un nuevo paquete, básicamente solo estás obteniendo eso de los administradores de paquetes nativos dentro de los proyectos respectivos. Entonces, si instalo, digamos, nuestra API de sistema de archivos, es una instalación de npm para mí, pero detrás de escena está utilizando CocoaPods para obtener las dependencias para iOS, utilizando bibliotecas de Android para Android. Por lo tanto, la historia de la gestión de paquetes aquí y cómo el código llega desde tus módulos de nodo al proyecto nativo se siente familiar para esas plataformas respectivas.
Echemos un vistazo a la arquitectura porque creo que esto es realmente importante. Tenemos nuestra aplicación web aquí en la caja azul nuevamente, y se renderiza dentro de una vista web nativa. Esta vista web nativa es básicamente una versión optimizada de Chrome, Safari, lo que sea, sin ninguno de los elementos de la interfaz de usuario del navegador. Cuando haces una llamada desde tu aplicación web a través de las API de Capacitor, esa vista web nativa podrá escuchar esa llamada, o al menos saber que algo dentro de ella está intentando llamar a una API de Capacitor. Obtendrá la información de a qué dispositivo estás intentando llamar y enviará eso a la capa de puente. La capa de puente luego se comunicará con las funciones nativas, ya sean funciones a nivel del sistema operativo o funciones de hardware. Serializará los resultados, los devolverá, los enviará de vuelta a la vista web nativa y luego eso se devolverá a tu código JavaScript. Entonces, arquitectónicamente, esto es muy similar a cómo funciona React Native, con la excepción de que estamos renderizando nuestra propia interfaz de usuario. Entonces, si tienes una biblioteca de interfaz de usuario, o si tienes tu propio sistema de diseño implementado, puedes llevar eso a un proyecto de Capacitor y seguir teniendo la misma experiencia entre tu sitio web, tu aplicación nativa de iOS y tu aplicación nativa de Android. Una gran experiencia en general. Lo que hace que esto sea diferente es que, como dije, puedes reutilizar tus aplicaciones web existentes y tus habilidades web existentes. Esto incluye bibliotecas de terceros, frameworks, nuevamente, hoy lo estamos viendo con React, pero esto es independiente del framework. Entonces, si más adelante trabajas en un proyecto y tienes que usar algo como Svelte o Solid, o Vue en el futuro, puedes hacerlo. El tiempo de carga del tiempo de ejecución es instantáneo, por lo que mientras tu aplicación se está iniciando, esencialmente puede llamar
Comments