
La eterna lucha entre aplicaciones híbridas y nativas: React Native
Seguramente una de las primeras preguntas que se hace un desarrollador antes de empezar un proyecto seria que tecnología debería utilizar, en este post hablaré de mi experiencia con React Native y la diferencia a utilizar tecnologías nativas para desarrollar tanto en IOS como Android.
Mi primer contacto con React Native fue hace un año por recomendación de un amigo, y francamente, sonaba genial, una tecnología para desarrollar en ambas plataformas con elementos nativos de cada sistema, pero como suelen decir, no todo lo que es oro reluce.
Instalación
Si vamos a la pagina y seguimos la guía veremos que hay dos formas de instalar React Native:
La primera forma nos permite crear nuestro proyecto sin tener que configurar Android studio ni xcode además de la posibilidad de poder ver nuestra aplicación en tiempo real desde nuestro propio dispositivo utilizando Expo CLI, sin embargo hay muchas limitaciones en esta forma de crear nuestros proyectos ya que muchas de las herramientas nativas que nos proporciona React Native no podremos utilizarlas como modificar ficheros de forma separada para cada plataforma, por tanto yo recomiendo encarecidamente la segunda opción aunque tardemos un poco en configurar Android Studio y Xcode.
Una vez terminada la guía de configuración deberíamos poder crear nuestro proyecto y ver una pantalla como esta:
¡Listo! A priori su desarrollo es sencillo y realizar operaciones que en nativo nos llevaría muchas líneas de código en React Native solo serian un par, al ser un framework de React utiliza la sintaxis de ECMAScript 6 por lo tanto si venimos de trabajar con Java Script no nos costará adaptarnos.
Desarrollo: Ventajas y desventajas
Sin embargo no es totalmente cierto que el mismo código nos valga para ambas plataformas, seguramente en muchas ocasiones tengamos que crear un componente para cada una ya que a diferencia con otras tecnologías hibridas como Ionic, la gracia de React Native es que el producto final es similar a una app nativa.
Trabajar con tecnologías hibrida nos obliga a utilizar paquetes externos, la mayoría desarrollados por la comunidad y aquí reside uno de los principales inconvenientes para mi a la hora de trabajar con React Native, tiene muy poco soporte al ser una tecnología relativamente nueva, si por ejemplo quisiésemos incorporar en nuestra app un login de Google tendríamos que utilizar una librería, si google decide en un momento dado cambiar el login en nativo, la comunidad tendría que rehacer la librería para React Native, si comparamos las posibilidades de los mapas de Google en Nativo y React Native vemos que en React Native pierden muchas funcionalidades:
https://github.com/react-native-community/react-native-maps
De nuevo, es una librería creada por la gran comunidad y eso nos limita a quedarnos obsoletos si Google saca una actualización.
Pero no todo son problemas, la otra cara de la moneda es la gran posibilidad que nos bridan todas las librerías de la comunidad, estas son algunas de las que he probado yo:
React Native Elements
React native Elements como su nombre indica es una librería con elementos ya diseñados como botones, inputs, iconos etc… es una librería casi indispensable si buscas un buen resultado grafico y no quieres gastar tiempo diseñando tus propios componentes.
React Nativation
Para crear una barra de navegación en la parte superior de la pantalla en tu app, la documentación es clara y fácil, en comparación con nativo es bastante mas fácil utilizar.
Google Native Google Sign In
Para iniciar sesión en google desde nuestra app, cuesta un poco mas que las demás ya que necesitas configurar el gradle de Android, algunos ficheros de Android y crearte una cuenta en firebase, una vez que lo tienes el código sencillo y la respuesta que te da es un json con los datos del usuario, un ejemplo básico sacado de la documentación:
En resumen, React Native me parece una opción interesante si queremos desarrollar aplicaciones pequeñas pero si queremos aplicaciones con muchos recursos podría complicarse y es preferible esperar a que haya mas soporte para React Native.