Y volviendo al ejemplo que mencioné antes, ¿dónde estamos ahora con nuestro viaje de compartir código del 95%? Si Tamagui menciona que proporcionan el 40% de eso, componer eso en pantallas o páginas nos lleva al 60%, otro 80% es proporcionado por una capa de datos, pero ¿qué queda en esa sección inferior? ¿Qué nos falta para llegar al 95%? Y realmente eso es el siguiente nivel de lo que estamos descubriendo ahora mismo en el espacio de React Native, y eso es la navegación.
La navegación ha sido históricamente difícil y desafiante de resolver en todas las plataformas, porque fundamentalmente existe la navegación interna, y lo que quiero decir con eso es cuando navegas utilizando la interfaz de usuario en sí. La experiencia de navegación real es interna a la interfaz de usuario, y eso es lo que encontrarás en una experiencia móvil, tocarás un botón y navegarás a una nueva página, tocarás un botón de retroceso y dentro de la interfaz de usuario navegarás hacia atrás. La principal excepción a eso es el botón de retroceso de Android, por supuesto, que es externo a la interfaz de usuario, pero no dedicaré mucho tiempo a eso. Luego, por supuesto, está la navegación externa, como lo que encontramos en la web, y si has usado un navegador antes, sabes que hay un botón de retroceso, un botón de avance, un botón de actualización y una barra de URL, así como pestañas, todos externos a la interfaz de usuario de la aplicación que estás construyendo. Todos estos manipulan el estado de navegación de la aplicación, completamente externos a la aplicación en sí, por supuesto. No tengo que explicar cómo funciona un navegador, pero lo principal es la barra de URL, y eso es fundamentalmente diferente y está ausente en una experiencia de navegación interna, pero está presente en una experiencia de navegación externa. Deberías poder copiar esa URL en una nueva pestaña y simplemente cargar la misma página para ti. Debería funcionar sin problemas. Y para demostrar un ejemplo de eso, tengo una grabación de la página de Instagram de mi gato. ¿No es adorable? Si navegamos utilizando la interfaz de usuario, como internamente en esa experiencia, puedes ver que se abre un modal. Se abre contextualmente sobre lo que hay detrás porque sabe lo que hay detrás porque todo ese estado de la aplicación es manejado por la aplicación en sí. Esto es similar a cómo podría funcionar la navegación móvil y de escritorio. Pero como puedes ver, copiar esa URL en una nueva pestaña abre la misma página pero no sabe qué poner detrás, por lo que la renderiza como una página completa. Esto es, nuevamente, como funciona la navegación externa en la web. Por lo tanto, para construir una solución de navegación en cada plataforma, necesitamos admitir ambas. Navegación interna y navegación externa, todo dentro de la misma experiencia. Esto ha sido históricamente muy difícil de hacer, especialmente en React Native. ¿Cómo empezamos a construir esto? Bueno, está React Router, por supuesto, que anuncia soporte para enrutamiento basado en DOM para navegadores, así como para React Native. Y si bien esto funciona muy bien, carece de enlaces nativos en dispositivos móviles para hacer cosas como arrastrar desde el borde de la pantalla para navegar hacia atrás. Simplemente no se siente nativo. La gestión del estado funciona, pero no se siente nativa en esas plataformas. Luego está React Navigation, que es una experiencia de navegación completa orientada a dispositivos móviles. Si has trabajado con React Native antes, es probable que hayas usado React Navigation. Utiliza pantallas de React Native de Software Mansion para proporcionar esa funcionalidad de arrastrar desde el borde de la pantalla para retroceder. Y en dispositivos móviles, funciona muy bien. En los últimos años, también han lanzado soporte web, como muestro aquí, y terminamos probándolo en Guild y simplemente no se sintió adecuado en la web. Si bien técnicamente funciona, varias cosas simplemente se sintieron extrañas. Cosas como la carga incremental de rutas, que obviamente deseas en la web, no quieres enviar todo en una carga masiva. También reescribiría la barra de URL de forma incremental, por lo que verías cómo se reescribe la barra de URL mientras esperas que se cargue el resto de la página, lo cual se sintió extraño. Y si presionas los botones de retroceso y avance, pondría la aplicación en un estado extraño donde simplemente no podía recuperarse, por lo que tendrías que volver a cargarla y la barra de URL se reescribiría nuevamente, por lo que simplemente se sintió completamente extraño.
Comments