que se estaban ejecutando. Así que era una infraestructura muy compleja que nunca pudo actualizarse para coincidir con lo que el ecosistema estaba proporcionando. Entonces, eventualmente, Cordova se convirtió en víctima de su falta de actualización. Y realmente no fue un buen momento. Si estás haciendo algo en Cordova ahora, te recomiendo encarecidamente que no lo hagas. Actualiza a capacitor después de esto.
Ahora, lo interesante de Cordova, y algunas cosas que creo que tenían que eran bastante interesantes, era, una vez más, la web era su objetivo principal. Querían ser un gran polyfill para cerrar la brecha en lo que el navegador estaba haciendo. La brecha entre lo que el navegador podía hacer y lo que podía hacer el nativo. Realmente no querían que la gente conociera un IDE nativo, lo cual, como alguien que es principalmente desarrollador web, cada vez que tengo que abrir Android Studio, me asusto un poco porque Android Studio es muy complejo. Lo mismo ocurre con Xcode. Puede ser una herramienta muy compleja y confusa, así que creo que tener la idea de abstraer eso fue un buen intento y un buen objetivo, pero la implementación dejó mucho que desear. Y luego los proyectos nativos tienen un objetivo DIST, lo que significa que tu proyecto nativo debería ser algo que se pueda configurar a través de herramientas y luego, si por alguna razón lo subes al control de versiones y luego tu compañero de trabajo tiene que clonarlo y configurarlo nuevamente, deberían poder seguir los mismos pasos y obtener las mismas características y habilitaciones, como acceder al sistema de archivos y la cámara, eso debería ser scriptable. Qué tan exitosos fueron en eso depende pero fue una idea interesante en ese momento. Pero definitivamente, en retrospectiva, es un poco obvio que esto definitivamente no funcionó al 100% bien, pero en ese momento era lo mejor que probablemente teníamos.
Ahora, en el otro extremo de ese espectro donde tenemos a PhoneGap a un paso de desarrollo web, ¿qué está un paso alejado del desarrollo nativo puro? Y eso es compilar a nativo, tus aplicaciones React nativas, por así decirlo, donde tienen un runtime de JavaScript, o un runtime en otro lenguaje. Y luego van y abstraen los controles, te proporcionan un widget o algo que puedes usar en lugar de eso que aísla la diferencia entre cómo se ve el texto en iOS y cómo se ve el texto en Android. Ahora esto es algo que es un punto de... Es un punto muy controvertido donde dicen que es una aplicación verdaderamente nativa. Pero todavía hay un runtime de JavaScript en la mayoría de estos y específicamente nos centraremos en React Native. Todavía hay un runtime de JavaScript ahí que ejecuta todo tu código. Cualquier lógica de tu aplicación que escribas en JavaScript se ejecutará y debe ejecutarse. Entonces, lo nativo verdadero es... Depende de cómo lo veas. Es posible que obtengas controles nativos, pero los controles nativos no son realmente lo más importante. Lo más importante es el código de la aplicación que estás escribiendo para realizar solicitudes, para manejar el estado dentro de tu aplicación. La interfaz de usuario es solo un detalle secundario, en mi opinión. Algo que hicieron bien, y que realmente creo que es un buen movimiento por su parte, es tener una biblioteca estándar alrededor de algunas de estas API nativas. Entonces, React Native proporciona una biblioteca central en la que el ecosistema ha podido construir y que puedes usar para construir y expandir. Pero la mayoría de esas API existen y están disponibles sin que tengas que instalar algo como Expo.
Ahora, oh, esta diapositiva estaba un poco desalineada. Ahora, lo que me gusta asegurarme de que las personas sean conscientes es que arquitecturalmente, React Native y otros proyectos similares son muy similares a Cordova. Donde tienes tu aplicación representada en este cuadro azul, tienes este runtime, que es, en el ejemplo de React Native, vajscore, también tienen algunos personalizados que ejecutan tu aplicación y luego toman las llamadas dentro de tu JavaScript y luego las vinculan con los módulos nativos y las pasan a este puente que llama a esas características, serializa esos resultados, y los devuelve a tu JavaScript. Este mismo flujo de trabajo existe básicamente en todas las soluciones hoy en día. Realmente no hay forma de evitarlo. Así es como funciona Cordova, así es como funciona React Native. Y como veremos, no están solos.
Ahora, no soy necesariamente alguien que hace React Native a diario, así que no voy a intentar mostrar algo de código, pero diré que, en las demos que he construido con React Native, donde se desmorona es tener que entender que no estás necesariamente trabajando en web pura o nativa pura. Por ejemplo, si estás en un entorno nativo puro, es posible que estés acostumbrado a tener acceso directo a las API. Con React Native, lo más probable es que estés construyendo un módulo nativo, que tiene sus propios pasos para exponer esas API de bajo nivel a tu JavaScript. O si estás tratando de obtener acceso directo a él, estás mezclando React Native en una aplicación nativa existente. Y luego estás en este lugar extraño, ¿qué aplicación se está ejecutando? ¿Qué procesos están ocurriendo? Es un lugar muy extraño en el que participar. Si vienes de una aplicación web, o ya tienes una aplicación web existente, y quieres usar algo como React Native, ahí estás un poco fuera de suerte, porque aunque existen bibliotecas como React Native DOM, React Native web, no estás cargando tu aplicación web existente y cargándola allí. Estás reescribiendo tu aplicación para asegurarte de que funcione en esas abstracciones, en primer lugar, y luego esperas poder volver a implementar lo que hace tu aplicación web existente dentro de React Native. Qué tan exitoso sea eso realmente depende del poder de ingeniería y de cuántas horas estás dispuesto a invertir en ello. Creo que es menos exitoso de lo que la gente intenta hacer creer. Hay mucho trabajo que se necesita para poner en marcha React Native web. E incluso entonces, si dependes de ciertas bibliotecas, como una, por ejemplo, llamada Quill.js, es uno de mis complementos favoritos de editor de texto enriquecido, no existe en el ecosistema de React Native. Entonces no puedes simplemente usarlo allí y agregarlo a tu aplicación de React Native. Tienes que volver a implementarlo. Deja mucho que desear.
Comments