Video Summary and Transcription
Remix es un framework web de pila completa que se enfoca en la interfaz de usuario y trabaja hacia los estándares web. Elimina las cascadas de renderizado y recuperación de datos en aplicaciones web, lo que resulta en un mejor rendimiento. Remix aprovecha los fundamentos de la web y los combina con características como el almacenamiento en caché HTTP y el renderizado dinámico en el servidor. Permite la mejora progresiva y acelera la experiencia del usuario. Remix es una poderosa herramienta para el desarrollo web con un gran potencial para el futuro.
1. Introducción a Remix y Web Fetch APIs
Bienvenidos a mi charla llamada React Remixed. Esta charla trata sobre las APIs de fetch web, HTML, formularios, objetos de datos de formulario, URL y otros. Cuando aprendes Remix, aprendes accidentalmente la web. Remix es un marco web de pila completa que se enfoca en la interfaz de usuario y se basa en los estándares web. Se puede considerar un compilador, un servidor HTTP del lado del servidor, un marco de servidor y un marco de navegador. Remix aprovecha la compilación de ES para generar el servidor HTTP, la compilación del navegador y un manifiesto de activos. El manifiesto de activos ayuda a precargar recursos y a prefetchearlos para la centralización del cliente. Esto permite que Remix elimine las cascadas de renderizado y fetch en las aplicaciones web.
Hola a todos. Bienvenidos a mi charla llamada React Remixed. Para cualquier otra cosa, permítanme presentarme. Soy Daniel Alfonso. Soy la persona de la izquierda en la foto, en caso de que no me reconozcan. La persona de la derecha aquí es mi compañero de programación. Soy un defensor del desarrollo en el grupo LLX. Soy embajador de Auth0 e instructor de Getion. Pueden encontrarme en Twitter y prácticamente en cualquier red social con el nombre de usuario DanielJCAlfonso.
Así que vamos directo a remixear y conocer más sobre ello. ¿De qué trata esta charla? Bueno, esta charla trata sobre las APIs de fetch web. Se trata de HTML, formularios, objetos de datos de formulario, URL y otros. Vale, ahora podrían preguntarse qué tiene que ver esto con Remix. Tiene que ver porque cuando aprendes Remix, aprendes accidentalmente la web. Ya sé, ya sé, ya sé, ya sé que podrían estar un poco cansados de que parezca que todos los días aparece un nuevo marco de JavaScript. Pero la cosa es, y como dije en la diapositiva anterior, cuando aprendes Remix, accidentalmente aprendes la web. Esto se debe a que Remix aprovecha las cosas que has estado haciendo en la web durante los últimos 20 años más o menos. Y se asegura de que cuando lo aprendas, adquieras conocimientos que puedas llevar de ida y vuelta entre la web y Remix, y esto es súper, súper genial.
Ahora, sé que podrían preguntarse, ¿qué es Remix? Y vamos a entrar en ello. Remix es un marco web de pila completa que te permite centrarte en la interfaz de usuario y trabajar hacia los estándares web para ofrecer una experiencia de usuario rápida, elegante y resistente. Remix también se puede considerar cuatro cosas. En este caso, un compilador, un servidor HTTP del lado del servidor, un marco de servidor y un marco de navegador. Vamos a profundizar un poco en cada uno de ellos para aprender un poco más. En cuanto a la parte del compilador, utilizando ES build, Remix generará tres cosas. Servidor HTTP, compilación del navegador y un manifiesto de activos. La compilación del navegador se utiliza para... e incluye automáticamente la división de código por ruta, importaciones de activos con huella digital como CSS e imágenes, prácticamente todo lo que necesitarás para ejecutar tu aplicación en un navegador. El manifiesto de activos, en este escenario, tanto el cliente como el servidor están utilizando este manifiesto de activos para conocer prácticamente todo el gráfico de dependencias de tu aplicación. Esto es útil cuando quieres precargar recursos en el renderizado inicial de tu aplicación, así como prefetchearlos para la centralización del cliente. Así es como Remix es capaz de eliminar las cascadas de renderizado y fetch que son muy, muy comunes en las aplicaciones web hoy en día. Utilizando este artefacto de compilación, una aplicación puede ser implementada en cualquier servicio de alojamiento siempre que ejecute JavaScript. En cuanto al servidor HTTP del lado del servidor y Android, este es un Android que se le da a estos servidores JavaScript que mencioné anteriormente.
2. Introducción a la filosofía de Remix
Remix es un marco del lado del servidor y un marco del navegador que se enfoca en la interfaz de usuario y se basa en los estándares web. Elimina las cascadas de renderizado y fetch en las aplicaciones web, lo que resulta en un mejor rendimiento. Remix abraza el modelo cliente-servidor y ayuda a disminuir la cantidad de datos enviados a través de la red. Aprovecha los fundamentos de la web, como los navegadores, HTTP y HTML, y los combina con características como el almacenamiento en caché de HTTP y el renderizado dinámico del servidor. Remix utiliza JavaScript para mejorar la experiencia del usuario y admite operaciones de lectura y escritura a través de formularios HTML. Permite la mejora progresiva y acelera la experiencia del usuario al minimizar las descargas de activos y obtener solo los datos necesarios. Remix no sobreactualiza las tecnologías subyacentes, lo que lo convierte en una excelente herramienta para el desarrollo web.
Mientras Remix se ejecuta en el servidor, en realidad no es un servidor en sí mismo. En cuanto a la parte del marco del lado del servidor de Remix, si estás familiarizado con los controladores de modelo-vista-controlador del lado del servidor como Warevel o Rails, Remix es el controlador y la vista, y deja el modelo en manos del desarrollador. Desde la perspectiva del marco del navegador, una vez que se sirve un documento al navegador, Remix se encargará prácticamente de iterar esa página con los modelos de JavaScript del navegador. Por ejemplo, si un usuario hace clic en un enlace, en lugar de hacer un viaje de ida y vuelta al servidor para obtener todo el documento y todos los activos, Remix simplemente obtendrá los datos para tu próxima página y actualizará la interfaz de usuario. Esto tiene muchos beneficios en términos de rendimiento en comparación con hacer una solicitud de documento completo, ya que estos activos no necesitan descargarse ni extraerse de la caché, no es necesario analizarlos nuevamente en el navegador y los datos que se obtienen son mucho más pequeños que todo el documento.
Entonces, sí, esto es realmente genial, y esta es una introducción muy breve sobre qué es Remix. Pero sí, hablando de ello, ¿cuál es su filosofía? Bueno, Remix abraza completamente el modelo cliente-servidor. Puedes hacer que tu servidor sea rápido. Lo que no puedes controlar es la red del usuario. A veces, todos hemos experimentado esto, parece que funciona muy bien para nosotros, pero luego verificamos nuestro código, nuestra aplicación en la red del usuario y, simplemente porque no tienen el mismo ancho de banda o lo que sea que tengamos nosotros, entonces la aplicación es lenta. Tarda más tiempo en cargarse. Entonces, Remix te ayuda a disminuir la cantidad de cosas que envías a través de la red, para que no necesitemos enviar toda la interfaz de usuario esqueleto, porque Remix obtiene y puede incluso precargar en ocasiones los datos antes de que se renderice la página, y esto nos facilitará enviar aplicaciones a nuestros usuarios.
Como dije anteriormente, Remix trabaja con los fundamentos de la web. En este escenario, los navegadores, HTTP y HTML. Estas son tecnologías que han existido durante mucho tiempo y son bastante geniales, y Remix las abraza por completo. Al combinar cosas como el almacenamiento en caché de HTTP, el enfoque de Remix en la URL para los activos, el renderizado dinámico del servidor y las características de HTML como el atributo de enlace con el prefetch, tienes todas las herramientas que necesitas para hacer que tu aplicación sea realmente genial, y como dije, los navegadores y estas otras cosas que han existido durante unos 20 años, son muy, muy buenos, y Remix los aprovecha al máximo. Remix utiliza JavaScript para mejorar la experiencia del usuario al emular el comportamiento del navegador. Mientras que la mayoría de los marcos recientes solo tienen APIs para leer y obtener datos, Remix tiene tanto lectura como escritura. ¿Por qué, podrías preguntar? Al aprovechar los formularios HTML. Los formularios HTML han existido durante mucho tiempo y han sido la base para la mutación de datos desde los años 90, por lo que Remix abraza esto y mejora por completo esa API. Esto permitirá que la capa de datos de una función de Remix funcione con o sin JavaScript en una página. Esto significa que JavaScript, cuando hablamos de Remix, es lo que se llama mejora progresiva. Si decides agregar JavaScript a tu aplicación, permite que Remix acelere tu experiencia de usuario de dos maneras en una transición de página. No descargando y evaluando activos de JavaScript y CSS, y obteniendo solo los datos para las partes del diseño que cambian. Por último, y el último punto de la filosofía de Remix es que no sobreactualiza las tecnologías subyacentes. Y es por esto que se dice que, con Remix, accidentalmente se aprende el desarrollo web en general. Remix lo hace conveniente de usar, como dije, navegadores, HTTP, JavaScript. Pero estas cosas no están ocultas ni abstraídas.
3. Introducción a la Navegación Anidada y Obtención de Datos
Entonces, sea lo que estés usando, es lo mismo que estarías usando con la web. Esta es prácticamente una introducción de unos seis minutos a Remix. Veamos las tres cosas principales que debes aprender: navegación anidada, obtención de datos y mutaciones. La navegación anidada te permite vincular segmentos de URL a la jerarquía de componentes. Remix facilita la carga de datos con una función de carga que obtiene los datos y proporciona acceso a ellos dentro del componente.
Entonces, sea lo que estés usando, es lo mismo que estarías usando con la web. Y sí, esta es prácticamente una introducción de unos seis minutos a Remix. Al menos en la parte teórica.
Ahora, vamos a ser un poco más prácticos y comprendamos las tres cosas principales que debes aprender para que puedas terminar la charla y sumergirte de lleno en Remix.
La primera, navegación anidada. La navegación anidada es básicamente la idea general de que puedes vincular segmentos de la URL a la jerarquía de componentes en la interfaz de usuario. Ahora sé que esto puede no tener mucho sentido al leer esta descripción, pero veamos un ejemplo. Aquí tenemos dos rutas, un perfil de usuario, una cuenta de usuario. Ambas rutas tienen algo en común, que es el usuario, donde tenemos el nombre de usuario. Y aquí tenemos dos pestañas, una para el perfil y otra para la cuenta. El concepto de navegación anidada es que cuando seleccionamos un perfil, nuestra ruta cambiará a ser usuario/barra/perfil y queremos renderizar esta parte anidada, que es la página de perfil anidada. Pero si hacemos clic en la cuenta, queremos que nuestra ruta cambie a cuenta y renderice la página anidada de la cuenta. Y así es como funciona la navegación anidada, porque cuando seleccionas una parte de la URL, de la interfaz de usuario, en lugar de volver a renderizar el resto o cambiar de página, se renderizará la parte anidada del componente. Y esto es muy poderoso. Y Remix aprovecha esto al máximo.
Para la siguiente parte, que es la obtención de data y las mutaciones. Bueno, sé que con las aplicaciones del lado del cliente y todo eso, estamos muy acostumbrados a usar useEffect o React, query o SWR, pero Remix hace esto mucho más fácil y sencillo. Veamos cómo podemos hacer la carga de data con Remix. Aquí tenemos un componente llamado héroes. En este componente, lo que queremos hacer es obtener algunos data, algunos datos de héroes, y renderizarlos. ¿Cómo funcionaría esto en Remix? Lo primero que tenemos que hacer es exportar una función de carga. Una función de carga es una función que se ejecutará cada vez que se cargue la aplicación. Y así es como puedes hacer la carga de data en tu aplicación. Cada vez que cargas una aplicación, puedes activar la obtención de algunos datos. Entonces, lo que tenemos aquí es que estamos devolviendo JSON. Esta es una respuesta HTTP y devolverá tus datos. Luego, para que dentro del componente podamos tener acceso a los datos, obtenemos nuestro gancho de carga de datos de usuario data, que nos dará acceso a los datos. Y luego, simplemente lo renderizamos. Y así es como puedes hacer la carga de data con Remix. Parece muy sencillo de hacer y hace que sea mucho, mucho más fácil obtener data.
4. Introducción a las Mutaciones y Acciones
Para las mutaciones, en lugar de usar cargadores, creamos acciones. Definimos el método que nuestro formulario utilizará y, cuando se envía, Remix activa la acción. Podemos acceder a la solicitud y los datos del formulario dentro de la acción, eliminando la necesidad de rastrear el estado en el componente. Una vez que tenemos los datos del formulario, podemos activar la mutación de datos.
Y desacoplar la complejidad, supongo, hace que sea mucho más fácil de entender. Para las mutaciones es muy simple. Pero en lugar de usar cargadores, creamos acciones. Ahora, es posible que te preguntes, ¿cómo activamos una acción? Hablé de los forms hace unos 3-4 minutos, ¿no es así? Porque así es como Remix realiza las mutaciones. Básicamente creamos nuestro formulario y definimos qué método va a utilizar nuestro formulario, obtener nuestro post, y luego tenemos dentro los campos que debemos completar y cada vez que lo enviamos, esta Remix podrá buscar en la aplicación y decir, bien, ¿hay alguna acción aquí que necesite ser obtenida o activada? Entonces, cada vez que hacemos clic en enviar, esta acción se activará y dentro de ella, hacemos algunas cosas. Podemos acceder a la solicitud, que es donde podemos obtener los datos del formulario que está lleno. Por lo tanto, no necesitamos realizar un seguimiento del estado dentro de nuestro componente porque cada vez que presionamos enviar, los datos del formulario se enviarán a nuestra acción y simplemente podemos estructurarlos aquí. Bien, una vez que tenemos nuestros datos del formulario, podemos activar nuestra mutación de datos y eso es prácticamente todo.
5. Introducción al Ejemplo de Código de Remix
Veamos un ejemplo de código de una aplicación construida en Remix que demuestra el enrutamiento anidado. La aplicación nos permite verificar y gestionar héroes, como Batman y Superman. Podemos ver sus perfiles, agregar nuevos héroes y eliminarlos. El código incluye una ruta de héroes, que autentica a los usuarios y obtiene datos de héroes. El enrutamiento anidado se logra utilizando un outlet, que renderiza las rutas anidadas. Al hacer clic en la ruta de índice, nos lleva a la nueva ruta, donde un formulario activa una acción para autenticar al usuario, validar los datos del formulario y crear un nuevo héroe. La aplicación también incluye una función de redireccionamiento.
Entonces, ahora veamos el ejemplo de código que tengo aquí, que es una aplicación construida en Remix que muestra un poco de este concepto para que podamos profundizar un poco más en eso. De acuerdo. Así que ahora basta de charla y veamos un poco de código y aquí tengo una demo, que es básicamente un concepto construido sobre la base de Tower of Babel, que es un cómic de Justice League de hace un par de años, donde bueno, Batman tenía una lista de héroes donde podías ver sus identidades reales y debilidades, por si acaso alguien de la Justice League o algo así se volvía enemigo.
Entonces aquí tenemos una aplicación construida sobre Remix y tenemos algunas cosas que podemos hacer aquí. Lo primero es lo primero, esto ya está aprovechando el enrutamiento anidado, pero te mostraré cómo. Aquí tenemos un componente simple donde podemos verificar a nuestros héroes. En este escenario estamos verificando el perfil de Batman y aquí podemos ver el usuario que está conectado y en este escenario Batman está conectado. Porque sí, queremos mantener esto seguro, nadie más debería usar nuestra aplicación. Y luego tenemos nuestra identidad de héroe, nuestra identidad secreta y cuáles son las debilidades. Por alguna razón, si Batman se arrepiente y quiere eliminar a ese héroe, puedes hacerlo. También puedes agregar nuevos héroes, así que por ejemplo, agreguemos a Superman. Aquí, Clark Kent tiene su identidad secreta y la debilidad es la kryptonita. Ok, así que ahora cuando guardemos esto, nuestro héroe estará aquí y sí, eso es básicamente lo que hace la aplicación. Si quieres eliminarlo, también puedes hacerlo.
Así que abramos un poco de código. Aquí tenemos nuestra ruta de héroes, que básicamente es lo que se va a renderizar cuando vayamos a la ruta de héroes Como viste anteriormente en mi explicación, estamos usando una carpeta para hacer algunas recuperaciones de datos. En este escenario, esta carpeta es responsable de autenticar a nuestro usuario y obtener nuestros datos de héroes para mostrarlos en nuestro menú que tenemos allí abajo. Y dentro de nuestra ruta llamamos a un gancho de datos llamado userloader para obtener nuestros datos y con esos datos vamos a renderizar nuestros héroes. Ahora es donde entramos en el enrutamiento anidado. Lo que permite el enrutamiento anidado es esta cosa divertida llamada outlet. Un outlet buscará en nuestras carpetas de archivos y verá si hay alguna carpeta creada con la ruta de héroes. En este escenario, encontrará dentro de las rutas que hay una carpeta llamada héroes y dirá ok, vamos a renderizarla. Lo primero que buscará es un índice y en este escenario nuestro índice dice acceder a la computadora mala y por eso nuestra primera página dice acceder a la computadora mala. Entonces esta es la parte anidada de los héroes, todas las cosas aquí que tenemos están dentro de héroes pero cada vez que renderizamos cosas en devoutlet, en las rutas anidadas, este es el índice de nuestra página de héroes. Ahora, si hacemos clic en él, vamos a la nueva ruta y volviendo a nuestro código, la nueva ruta está aquí, así que héroes slash new. Así es como puedes verificar la ruta en Remix. Aquí tenemos algunas cosas, pero básicamente lo que tenemos es una acción, que se activará cuando se envíe este formulario aquí. Así que tenemos nuestro formulario, activamos nuestra acción, esta acción está haciendo algunas cosas, una vez más está obteniendo la solicitud, gracias a la solicitud está autenticando a nuestro usuario, está obteniendo los datos del formulario que se completan en el formulario y luego algunas validaciones y está creando nuestro héroe. Y sí, eso es básicamente lo que hace esto. Ah, y también activa una redirección.
6. Introducción a las características de Remix
Esta redirección es una respuesta 302 que aprovecha la web. Funciona obteniendo datos y devolviéndolos al usuario. Las rutas dinámicas en Remix permiten renderizar diferentes héroes según sus IDs. Remix proporciona stacks como Grunge, Indie y Wolf para facilitar el desarrollo de aplicaciones. En comparación con Next, Remix es más rápido al servir contenido dinámico y estático, proporciona una experiencia de usuario más rápida en redes lentas, maneja errores e interrupciones y desacopla las actualizaciones en tiempo real de los datos.
Esta redirección es básicamente una respuesta 302, como dije, aprovecha la web. Esta es una respuesta HTTP. Sí, así es como funciona. Y sí, eso es básicamente lo que hace. Ahora, es posible que te preguntes, ¿cómo voy a renderizar a todos los héroes? Porque si miras aquí, cada héroe debería tener un ID aleatorio. Permíteme agregar uno más para que puedas verlo. Sí, como puedes ver, el ID no es el mismo que el de Batman. No voy a crear una ruta para cada uno porque, bueno, eso no sería escalable. Aquí es donde aprovechamos las rutas dinámicas. Al agregar un espacio aquí, al agregar el signo de dólar y ponerlo, Remix dirá, ok, todo lo que esté dentro de Héroes y no esté especificado aquí, se incluirá en esta ruta. Esta ruta está haciendo algunas cosas, pero básicamente es el concepto general de un cargador. Una vez que se obtienen los datos, se devuelven. Estos datos son recogidos por los datos del usuario, y luego tenemos un formulario para activar o eliminar este formulario como una acción correspondiente. Y sí, eso es básicamente cómo funciona nuestra aplicación. De acuerdo. Entonces, para concluir, veamos algunas cosas que Remix puede facilitarnos. Los stacks de Remix son un conjunto de alternativas que podemos usar para comenzar a construir nuestra aplicación con Remix. Tenemos el stack Grunge, el stack Indie, el stack Wolf y prácticamente todos dependen de lo que quieras implementar, qué base de datos quieras usar, etc., etc. Y es genial. Pruébalo y compruébalo. Para concluir esta charla, abordemos la pregunta del millón, que es Remix versus Next. Bueno, aquí tenemos un código QR que puedes escanear. Esto te redirigirá al blog de Remix, donde tienen un estudio que compara Remix con Next. Y durante este estudio, llegaron a la conclusión de un par de cosas. Lo primero y más importante, Remix es tan rápido o más rápido al servir contenido dinámico y estático. E incluso permite una experiencia de usuario más rápida incluso en redes lentas, porque como dije, puedes hacer que tu servidor sea rápido, pero no puedes hacer que las redes de tus usuarios sean rápidas, y Remix nos facilita... Bueno, permitir una experiencia más rápida incluso en estas redes lentas, como está escrito aquí. Además, maneja automáticamente errores, interrupciones y condiciones de carrera, y esto es súper, súper genial. Ahorra mucho tiempo al no tener que implementarlo todo por ti mismo.
7. Reflexiones Finales sobre Remix
Y todos los tiempos reales en Remix se desacoplan instantáneamente de los datos. Remix es súper genial y es muy emocionante ver todas las increíbles noticias que han estado surgiendo a su alrededor. Definitivamente veo un futuro muy, muy, muy grandioso y brillante para Remix y quiero quedarme para verlo en los próximos años. Gracias a todos por ser parte de RemixConf. Esta es una experiencia súper increíble estar aquí hablando y aprendiendo de todos los increíbles otros ponentes. ¡Nos vemos por aquí!
Y todos los tiempos reales en Remix se desacoplan instantáneamente de los datos. Entonces, ¿esto significa que tienes que dejar de usar Next? Bueno, supongo que depende de ti. Los frameworks van y vienen. Remix es súper genial y es muy emocionante ver todas las increíbles noticias que han estado surgiendo a su alrededor, y definitivamente veo un futuro muy, muy, muy grandioso y brillante para Remix y quiero quedarme para verlo en los próximos años.
Entonces, antes que nada, permítanme comenzar agradeciéndoles a todos ustedes. Gracias a RemixConf por tenerme aquí. Esta es una experiencia súper increíble estar aquí hablando con todos ustedes y aprendiendo de todos los increíbles otros ponentes sobre nuestro amor común en este momento, que es Remix. He sido Daniel Alfonso, este es un código QR que puedes escanear si quieres encontrarme en Twitter o enviarme un mensaje. Sí, muchas gracias. Espero que tengan el resto de un buen día y una semana increíble. Nos vemos por aquí. ¡Adiós!
Comments