Deja de Escribir Tus Rutas

This ad is not shown to multipass and full ticket holders
React Summit US
React Summit US 2025
November 18 - 21, 2025
New York, US & Online
The biggest React conference in the US
Learn More
In partnership with Focus Reactive
Upcoming event
React Summit US 2025
React Summit US 2025
November 18 - 21, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

Cuanto más sigues trabajando en una aplicación, más complicado se vuelve su routing, y es más fácil cometer un error. ""¿La ruta se llamaba users o era user?"", ""¿Tenía un parámetro id o era userId?"". Si tan solo TypeScript pudiera decirte cuáles son los posibles nombres y parámetros. Si tan solo no tuvieras que escribir ni una sola ruta más y dejar que un plugin lo haga por ti. En esta charla, repasaremos lo que se necesitó para traer rutas tipadas automáticamente para Vue Router.

This talk has been presented at Vue.js London 2023, check out the latest edition of this JavaScript Conference.

FAQ

Una API (Interfaz de Programación de Aplicaciones) es crucial porque actúa como un puente entre diferentes software. Un buen diseño de API facilita el desarrollo al ser intuitiva y robusta, reduciendo la probabilidad de errores y mejorando la eficiencia del desarrollo.

Los principales desafíos incluyen manejar la compatibilidad con versiones anteriores, la facilidad de uso, la seguridad y la capacidad de manejar adecuadamente los errores, así como considerar la evolución de la API sin interrumpir a los usuarios actuales.

Un mal diseño puede hacer que sea fácil cometer errores, lo que lleva a frustraciones y pérdida de tiempo. Esto puede disminuir la productividad y aumentar la curva de aprendizaje para nuevos desarrolladores.

El enrutamiento basado en archivos permite definir rutas a través de la estructura de carpetas y nombres de archivos en un proyecto, eliminando la necesidad de configurar explícitamente cada ruta, lo que simplifica la gestión de rutas y reduce el código repetitivo.

Desconectando View Router es una propuesta para mejorar el enrutamiento en aplicaciones Vue mediante la automatización de la generación de tipos y la configuración de rutas, lo que facilita el mantenimiento y mejora la productividad al reducir errores y repetición de código.

La ergonomía de API se refiere a qué tan fácil y intuitivo es utilizar una API. Una buena ergonomía permite a los desarrolladores usar funciones comunes sin dificultades y adivinar correctamente cómo usarlas, lo que mejora la eficiencia del desarrollo y la experiencia del usuario.

Eduardo San Martin Morote
Eduardo San Martin Morote
30 min
12 May, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Diseñar APIs es un desafío, y es importante considerar el lenguaje utilizado y las diferentes versiones de la API. La ergonomía de la API se centra en la facilidad de uso y los compromisos. El routing es un aspecto malentendido del diseño de API, y el routing basado en archivos puede simplificarlo. Desenchufar View Router proporciona rutas tipadas y elimina la necesidad de pasar rutas al crear el router. La carga y manejo de datos pueden mejorarse con cargadores de datos y rutas predecibles. También se discute el manejo de rutas protegidas y archivos de índice e ID.
Available in English: Stop Writing Your Routes

1. Diseño de APIs: Desafíos y Consideraciones

Short description:

Diseñar una API es realmente difícil. Es uno de los mayores desafíos de cualquier biblioteca de código abierto. Una buena API dificulta la comisión de errores y evita el cambio de contexto. Es importante escribir diferentes versiones de una API y considerar el lenguaje utilizado. El proceso de aprendizaje para una API es subjetivo.

Entonces sí, mi nombre es Eduardo. Buenos días, Londres. Feliz de estar aquí otro año. Así que como miembro de Querty pero también como desarrollador y amante del código abierto, he estado haciendo mucho desarrollo de bibliotecas, casi durante siete años creo. Así que no solo PNIA y Vue Router sino también algunas de las bibliotecas que están justo al lado de Vue en sí. Y he estado pasando bastante tiempo pensando en cómo diseñamos las APIs para estas bibliotecas. A veces metiendo la pata, cometiendo errores, a veces mejorándolos después, por supuesto. Pero el punto es que diseñar una API es realmente difícil, ¿verdad? Y creo que no hace falta decir que esto es uno de los mayores desafíos de cualquier biblioteca de código abierto porque tienes que considerar muchas cosas, lo siento, tienes que tener en cuenta muchos factores diferentes. Es desde cómo cambian estas API, espera, lo siento, necesito cambiar la cosa. Esto va a ser doloroso. Vale. Así que tienes que tener en cuenta muchos factores diferentes desde, espera, mi software se rompió aquí y creo, ¿cómo lo hago? Vale, tengo que hacer todo de memoria. Dios, no tener ninguna nota cuando, se supone que debemos tener notas, es muy difícil. Así que tienes que tener en cuenta muchas cosas diferentes. ¿Vale? Tienes que considerar los usuarios que tienes, ¿estás construyendo una nueva API? ¿No estás construyendo una nueva API? Y cómo se siente la API para los usuarios, porque al final, que una API sea buena o mala es muy subjetivo. Y voy a mostrarles por qué. Así que una de las cosas que siento que es muy importante para una buena API es hacer que los errores sean difíciles de cometer. Ahora, puede ser obvio para algunos y completamente nuevo para otros, pero si usas una biblioteca donde cometer errores es fácil, te hace sentir tonto. Ahora, a nadie le gusta sentirse tonto cuando están usando algo, ¿verdad? Así que definitivamente es un gran factor en mi opinión de cómo una API puede ser buena o no. Otra gran cosa es evitar el cambio de contexto. Ahora, cuando pensamos en las APIs, primero pensamos en el código que necesitamos escribir. Pero si la API real va más allá del código que escribimos, no es solo los archivos, la carpeta que tenemos, sino que podemos pensar en muchas otras cosas que son parte de la API porque cuando escribimos código, cuando desarrollamos un programa, no estamos solo escribiendo el código en sí. Y luego tenemos que adaptarlo para diferentes experiencias de usuario.

Ahora, esto es muy vago para ser honesto, pero no es lo mismo escribir una V1 de una API, donde solo tienes nuevos usuarios, que escribir una V2 de una API donde tienes usuarios existentes que están acostumbrados a algo. Además, tienes que pensar en bien, ¿en qué idioma estás escribiendo no es lo mismo escribir una API en Java o Rust, que en JavaScript o TypeScript donde las cosas están evolucionando muy rápido. Y me gusta referirme a esta pequeña broma, la curva de aprendizaje del usuario. Entonces, la cosa es que nuestra experiencia al aprender algo, que también es parte de una API, el proceso de aprendizaje es diferente y es subjetivo. Entonces, la broma

2. Different Tools and API Ergonomics

Short description:

Diferentes herramientas tienen distintos niveles de eficiencia y productividad. Notepad es rápido pero no eficiente. Pico permite más funcionalidad. Visual Studio tiene muchos atajos pero puede llevar a una disminución de la productividad. Vee, Veeam y Nveam requieren aprendizaje pero resultan en alta productividad. Emacs y Spacemacs son herramientas poderosas. Esto forma la base de la ergonomía de las API.

Tienes como el tiempo recientemente y luego cuánto puedes hacer con una herramienta. Así que, como puedes ver, Notepad, puedes usarlo muy rápidamente y no eres muy eficiente. Luego tienes Pico, que es solo una herramienta basada en terminal y puedes hacer un poco más de cosas. Luego tienes Visual Studio, donde aprendes muchos atajos, creo, y creo que la broma es que luego empiezas a profundizar demasiado en el IDE y pasas demasiado tiempo haciendo cosas y luego te vuelves menos productivo. Y luego tienes Vee o Veeam o Nveam, que básicamente necesitas aprender mucho antes de siquiera poder usarlo, pero luego eres muy productivo. Y luego tienes Emacs y Spacemacs, que doblan el tiempo y el espacio, creo, porque no hay manera de hacer eso en matemáticas. Y así voy a usar esto como base para lo que llamo ergonomía de las API.

3. API Ergonomics and Erasing APIs

Short description:

La ergonomía de las API trata sobre la frecuencia y la facilidad de uso de una función. No es lineal, pero los compromisos son necesarios. Las funciones comunes deben ser fáciles de lograr y recordar. Hoy, exploraré la eliminación de una API y me centraré en mantener las cosas juntas, reducir la repetición y mejorar la experiencia de desarrollo. El enrutador es un buen lugar para hacer esto, ya que el enrutamiento es ampliamente malentendido.

Ahora, la ergonomía de las API, la defino como la frecuencia con la que usas una función, siendo la función un concepto muy vago y abstracto, ¿de acuerdo? Y con qué frecuencia o qué tan fácil es para ti adivinar cómo usar esa función. ¿Has usado antes o no, tienes que tener en cuenta todas estas cosas.

Ahora, podrías imaginar que esto es algo lineal. Por supuesto, no lo es. Y definitivamente no es el objetivo de tener este tipo de ergonomía de las API siendo lineal. En realidad, cuando creo que es mejor, bueno, por supuesto, el mejor escenario es tener algo que vaya así. Pero como puedes imaginar, eso realmente no es posible en la vida, ¿verdad? Así que, tenemos que tener algunos compromisos aquí. Y creo que esto es algo, quiero decir, este gráfico, esta línea ergonómica tiene más sentido y es realmente buena.

Ahora, si lo comparas con el otro aquí, podemos ver que vamos a pasar mucho tiempo haciendo las tareas que son fáciles de hacer, fáciles de adivinar. Así que, esto nos hace sentir más inteligentes porque podemos descubrir las cosas por nosotros mismos. Así que, en términos de la experiencia que estamos desarrollando en nuestra biblioteca, es mucho más interesante. Por otro lado, cualquier cosa que sea bastante compleja, un caso límite, cosas que no haces tan a menudo, tal vez haces un proyecto dos veces, así que tal vez una vez al año o menos, esos van a requerir más trabajo, tal vez usando diferentes APIs, diferentes opciones combinando múltiples cosas en la propia biblioteca para hacer que las cosas funcionen. No tienes una opción como en Nux donde simplemente haces SSR true y tienes SSR, donde simplemente haces view, ¿verdad? Tienes que configurar el servidor V, tienes que configurar muchas cosas.

Ahora, no estoy diciendo que Nux aquí sea malo, todo lo contrario, pero creo que hay un compromiso aquí que se debe encontrar y que si hacemos que las funciones comunes sean fáciles de lograr y fáciles de recordar, estamos ganando mucho al final del día. Así que hoy, quiero explorar este camino borrando una API. Y realmente quiero decir borrar, así que esto no es un cambio radical. No estamos eliminando, ¿de acuerdo? No estamos quitando. Estamos borrando. Y quiero mostrarte un enrutador de vista como ejemplo. Y quiero centrarme en tres cosas. Quiero mantener las cosas juntas, así que esto es para reducir el cambio de contexto. Quiero reducir la repetición, así que solo para iterar más rápido, para poder escribir más en menos tiempo. Y quiero mejorar la experiencia de desarrollo haciendo que los errores sean más difíciles de cometer o más fáciles de detectar ambas cosas al mismo tiempo. Ahora, creo que el enrutamiento o el enrutador es un buen lugar para hacer eso porque el enrutamiento en sí es ampliamente malentendido. Y, honestamente, no culpo a nadie que no entienda bien el enrutamiento porque es la tierra de APIs en constante cambio en el navegador. Como, ¿usamos hash? Solíamos hacer URLs con hash. Ahora, ya no lo hacemos. Es malo para el SEO.

4. Challenges of Routing and File-based Routing

Short description:

Múltiples formas de analizar URLs, diferentes eventos y próximas APIs, y los desafíos del enrutamiento en una aplicación. Comportamiento propenso a errores y la necesidad de simplificación. Enrutamiento basado en archivos como solución.

analizar las URLs que son totalmente válidas y ambas funcionan y tal vez incluso puedas usar ambas al mismo tiempo. Por cierto, ni siquiera tienen la URL en el nombre de la API, sph-state. Si tienes historial, pero aún así. Y luego tienes múltiples formas de analizarlo como location.href y luego el constructor de URL tendrá parámetros de búsqueda de URL. Tenemos diferentes eventos y incluso tenemos próximas APIs que, como puedes imaginar, no son compatibles con todos los navegadores como Safari no tiene una palabra sobre estas API que han estado en una discusión en curso durante dos años ya. Así que, ni siquiera sabemos a dónde ir. Al menos, ya no tenemos Internet Explorer, pero aún así.

Así que, además de eso, es donde muchas de las diferentes cosas o tu aplicación se juntan, el enrutamiento. Así que, tienes estado en la URL. Tienes la interfaz de usuario con transiciones o animaciones que pueden ocurrir entre las páginas. Y luego tenemos el modelo como con la obtención de datos, generalmente se integra eso con el enrutamiento. Y tenemos un montón de vocabulario, ¿de acuerdo? Y esto puede parecer nada, pero cuando tienes que recordar la palabra correcta cuando estás buscando la documentación, hace una gran diferencia porque no puedes encontrar la ayuda real en la documentación. Así que, se vuelve muy frustrante. Y además de eso, tenemos un comportamiento propenso a errores. Por ejemplo, defines rutas de esta manera teniendo un camino y nombre y luego puedes empujar con un nombre y puedes empujar con una cadena. Pero ¿qué era antes? ¿Era slash about, era about? Y no vas a obtener ningún error cuando estás escribiendo este código hasta que vayas al navegador, así que cambias de contexto, ves el error en la consola diciendo, oye, no hay nombre de ruta slash about. Y ni siquiera te dice si hay otro nombre de ruta about. Así que, ¿podemos simplificar todo esto? Por supuesto, no estaría hablando aquí si no pudiéramos simplificar esto. Y quiero centrarme en una parte muy simple del enrutamiento que es crear rutas, es el comienzo de cualquier aplicación SPA. Ahora, cuando creas una ruta, usualmente creas un archivo. Esto es algo que podemos fusionar juntos. Y creo que esto va a ser familiar para muchos de ustedes. Y estamos como borrando la creación de la ruta, creando el objeto, el registro de ruta. El problema que surge antes es que todavía necesitamos configurar las rutas, pero ya no estamos escribiendo la configuración. Entonces, ¿cómo manejamos eso?

Y así, quiero hacer una pequeña demostración rápida, ¿quién ha usado enrutamiento basado en archivos antes? Bien, casi todos... Oh, hay una gran diferencia en ambos lados. Más de la mitad de las personas aquí. Así que, el enrutamiento basado en archivos es lo que te permite definir estos arrays de rutas o incluso la ruta por completo. El enrutador, lo siento, por completo. Simplemente teniendo una estructura de carpetas.

5. Enrutamiento basado en campos y manejo de errores

Short description:

Nuxt borra completamente la creación del enrutador, abogando por reducir la repetición de código mientras se mantiene la flexibilidad. El enrutamiento basado en campos proporciona un mapeo predecible y elimina la necesidad de múltiples aprendizajes. Las herramientas pueden generar código pegamento, permitiendo a los desarrolladores centrarse en la parte interesante. Los tipos y errores son cruciales, apuntando a errores precisos en lugar de genéricos. Los tipos de tiempo de ejecución y las cadenas literales pueden transformar objetos en tipos reales. Generar parámetros para cada ruta puede ser lento y resultar en código ilegible.

ruta en su totalidad. El enrutador, lo siento, en su totalidad. Simplemente teniendo una estructura de carpetas. Ahora, esto es lo que hace Nuxt. Borró completamente la creación del enrutador. Y quiero mostrarles algo similar y quiero abogar un poco más por ello. Entonces, la idea y el punto clave aquí es que necesitamos una forma de reducir la repetición de código, que es lo que está sucediendo aquí, sin comprometer la flexibilidad, que es poder configurar las rutas.

Entonces, cuando tenemos enrutamiento basado en campos, lo que tenemos y lo que es muy importante es que tenemos un mapeo predecible uno a uno. Entonces, sabemos y tenemos algunas reglas que quizás aprendemos una vez. Sabemos que index dot view, index dot HTML simplemente se convierte en una barra al final. Y sabemos que incluso tenemos los corchetes, se convierte en un parm. Y lo bueno es que porque esto está justo al lado de ti en tus archivos, en tu editor, ves esto todos los días. Entonces, realmente no necesitas aprender esto varias veces, ¿verdad? Lo aprendes una vez y luego está en tu cabeza, está ahí. Y porque tenemos un mapeo uno a uno, podemos dejar que todas las herramientas generen el código pegamento para que podamos escribir solo la parte interesante, idealmente.

Ahora, esto incluye los registros de ruta e importaciones que son algo de código repetitivo. Pero también, podemos tener tipos que podríamos escribir manualmente pero que se van a generar por sí mismos, por lo que siempre son correctos. Y también, otras metas de ruta y otras cosas que son código más allá de eso. Entonces, la idea aquí es que queremos obtener un error si escribimos algo como esto. Y no queremos el clásico error de TypeScript cuando dice que la cadena no es asignable al tipo A. Luego tienes tres puntos en los que ni siquiera puedes hacer clic. Y luego, tienes algo como nunca no es asignable a cadena. Y ni siquiera sabes qué pasó en medio. Idealmente, quieres un error preciso que te diga, oye, a este objeto le falta la propiedad ID, ¿verdad? Este nombre no existe. Esta condición no es posible. Entonces, estos son tipos y errores, ¿vale? Este parámetro otro no existe para esta ruta porque comprobamos que el nombre es ID por lo que la forma del parámetro es un objeto con un ID. Y entonces, inicialmente, quería hacer esto con tipo, con tipos de tiempo de ejecución que, es una característica muy interesante de TypeScript. Entonces, tienes lo que llamamos cadenas literales que en realidad podemos analizar y podemos transformar objetos en tipos reales. Todo esto funciona, ¿vale? Y lo hice... Entonces, lo bueno es que simplemente necesitas tomar tu array de rutas, pones esto como const al final, y luego puedes generar un objeto que contiene todos los parámetros para cada ruta con nombre. Ahora, el problema es que esto es realmente lento. Y me llevó algún tiempo probarlo porque cuando empecé a hacerlo empiezas con unas pocas rutas. Pero luego cuando llegué a 50, me di cuenta de que no logré nada más que hacer que el servidor de TypeScript se bloqueara, lo cual puede ser un logro en sí mismo, pero no es lo que quiero para mi vida diaria en el desarrollo. Y además de eso, tengo

6. Desconectando el Enrutador de Vista: Conceptos básicos y Rutas Tipificadas

Short description:

He escrito muchos lenguajes y C y Prolog, pero nada se compara con este código. Me di cuenta de que tenía que volver a los conceptos básicos y crear un tipo que asocie una ruta a los tipos. Desconectando el Enrutador de Vista es una biblioteca que funciona con diferentes herramientas y proporciona rutas tipificadas. Ya no necesitas pasar la ruta al crear el enrutador.

para decir que este es el código más ilegible que he escrito en toda mi vida. Y he escrito en muchos lenguajes y C y Prolog, si conoces este lenguaje. Así que he escrito código ilegible muchas veces diferentes. Pero nada se compara con este código. Y lo intenté muy duro para hacer algunas de las cosas legibles aparte de los genéricos de una letra, que es solo parte de la vida de LifeScript. Y realmente no me avergüenzo, se pone aún peor, ¿vale? Pero te invito a que simplemente revises el enlace y presencies la magia completa de Turing en TypeScript aquí. No voy a profundizar en los tipos por supuesto, no tiene sentido. La cuestión es que me di cuenta de que tenía que volver a los conceptos básicos. Tenemos que volver a algo que no aplaste a TypeScript y que sea más fácil de entender, que pueda ser legible para los humanos aunque nos estemos convirtiendo en cosas de AI. Entonces, ¿cuál es el tipo más básico que podemos tener para asociar una ruta a los tipos? Entonces, tenemos parámetros de tipo y cosas así. Y si especificamos el nombre como una clave y luego tenemos algún tipo de objeto que define las diferentes propiedades de la ruta. Estos siguen siendo legibles para los humanos. Y se vuelve muy poderoso porque podemos usar la clave de mapa solo para obtener todos los nombres y luego podemos obtener los parámetros de cada ruta diferente. Ahora, el tipo real es un poco más complejo pero sigue siendo legible. Y lo bueno es que podemos aplicar estos a cualquier otro tipo de ayuda, quiero decir, a cualquier otro tipo que exista en el enrutador de vista y hacerlos tipificados. Así que ya no te permiten simplemente pasar una cadena en el nombre. Se convierte en una unión de muchas cadenas diferentes. Y así es donde viene Desconectando el Enrutador de Vista. Ahora, sé que no es un nombre elegante. No tiene un logo lindo como Pina pero esto es solo porque quiero mantenerme lo más cerca posible del nombre de la biblioteca, el enrutador de vista en sí y también porque funciona con diferentes cosas, Vite, DRAWLAB, Webpack, etcétera, etcétera. Puedes usarlo sin ninguna opción. Ahora, esto no es algo nuevo en sí mismo cuando se trata del enrutamiento basado en archivos. Es algo que ha existido durante mucho tiempo, vale, desde 2018, creo, Hattachine, otro miembro del equipo central de VGS, hizo esto. E incluso hoy, uno de los plugins más comunes es Vite Plugin Pages de Han, creo. Así que estoy introduciendo otras cosas. Y esto es específico para ViewRouter por algunas razones. La idea aquí, y esto es la parte interesante, es que no solo necesitas cambiar todas las importaciones de ViewRouter a ViewRouter auto. Y esto te va a dar los tipos que están tipificados en base a tus rutas. Entonces, la cosa es, todavía tienes el control. Creas el enrutador pero ya no pasas la ruta, que es la gran parte de la plantilla del enrutamiento, ¿vale? Oops,

7. Rutas Tipificadas y Configuración de Rutas

Short description:

Puedes modificar las rutas en tiempo de ejecución o de construcción. Al pasar parámetros, puedes tipificar de forma segura las rutas y ver los errores en tu editor. Al usar useRoute, puedes especificar la ruta específica para una página. La forma en que funciona es generando un gran archivo de tipo ruta DTS que te permite configurar mapas de nombres de rutas y sobrescribir para tu enrutador y funciones.

lo siento. Eso fue un poco rápido. Todavía puedes modificar las rutas ya existentes. Y esto es el cambio en tiempo de ejecución. Puedes extender las rutas. También puedes hacerlo en tiempo de construcción. Así que puedes, en tu configuración de V, añadir cualquier ruta y estas serán tipificadas también. Así que tu código reconocerá todo. ¿Cómo funciona? ¿Cómo se ve? Así que en lugar de simplemente empujar una interpolación de una cadena aquí de una ruta. Este es un ejemplo de Vitess, por cierto. Lo que hacemos aquí es que podemos pasar el nombre, que se va a auto-completar aquí. Así que podemos seleccionar la ruta que queremos y luego vamos a poder añadir el objeto params y ese objeto params nos va a decir, hey, te falta un ID aquí. Tan pronto como pongo las llaves rizadas. Y así tenemos la auto-completación y no el ID, el nombre. Lo siento. Pero básicamente captas la idea. Puedes pasar cualquier param que quieras aquí y será tipificado de forma segura así que no necesitas cambiar al navegador para ver un problema. Lo verás directamente en tu editor. Así que no tienes ningún cambio de contexto. Ahí vamos. Y luego creo que borré esa línea porque simplemente no es buena. Bien. Ahora, cuando obtienes la ruta de, con useRoute, tienes todas las rutas posibles aquí que pueden aparecer en tu aplicación. Pero cuando estamos en una página, este es name.ui, ¿ves el nombre del archivo de la aplicación allí arriba? Sabemos que hay un parámetro de nombre en la URL, ¿vale? Entonces, ¿cómo le decimos a useRoute que esta es la real, estamos seguros de que esta es la ruta que, esta es la ruta high name? Así que podemos pasar un genérico aquí. Así que voy a escribir high, ese corchete nombre. Y luego la ruta se convierte en una versión específica de la aplicación. Y por supuesto, este genérico, como viste, no se auto-completó. Ahora, creo que cambiaron eso en recientes TypeScript,

8. APIs Mejoradas: Carga y Manejo de Datos

Short description:

La versión que permite pasar un argumento sí autocompleta. La forma en que funciona es generando un gran archivo de tipo ruta DTS que puedes configurar. La clave es no comprometer la flexibilidad mientras se facilitan las tareas comunes. La macro de página definida permite pasar propiedades para la configuración de la ruta. La carga de datos es un tema enorme con diferentes opciones de manejo. Watch en los parámetros carece de estado, errores y manejo de SSR. Los guardias de navegación se vuelven duplicados y verbosos. Los guardias de navegación globales ofrecen una solución conveniente. Suspense en la superficie es perfecto pero tiene algunos problemas de manejo de errores y manejo de SSR.

quizás cinco. Pero también agregué la versión que te permite pasar un argumento porque esa sí autocompleta. Así que ni siquiera necesitas pensar demasiado en ello. Ahora, la forma en que funciona es que, al generar, un gran archivo de tipo ruta DTS que puedes configurar, tienes este mapa de nombres de rutas, y luego tienes algunos extras, por lo que tienes sobrescrituras de todos los tipos de tu enrutador y funciones. Y luego la idea es, como mencioné antes, cómo estamos haciendo que las cosas que haces muy a menudo sean fáciles de hacer, ¿vale? Y todas las cosas que son menos comunes, más difíciles. Pero la idea, y la clave, es no comprometer esa flexibilidad. Deberías seguir siendo capaz de hacer todo lo que podías hacer antes, que es la configuración.

Así que aquí está la macro de página definida, que, bueno, sé que estamos haciendo muchas macros aquí, define, define, define algo, así que solo otra para recordar, pero la idea es que puedes pasar todas las propiedades que estás usando en la configuración de la ruta, en las rutas La diferencia es que estamos en la página, por lo que no hay cambio de contexto, nos estamos quedando en el mismo componente, estamos definiendo cosas. Y podemos agregar cualquier cosa que queramos. También podemos tener bloques JSON, o Yaml, u otras cosas si quieres. Y entonces, lo genial es que porque esto va a afectar a los tipos reales, si lo cambias aquí, así que voy a definir la página y cambiar el nombre de esta ruta a algo más. Así que estoy cambiando mi propio nombre aquí, voy a guardar, y voy a obtener un error aquí porque este nombre ya no existe. Así que obtienes una retroalimentación instantánea así, y luego lo cambio solo para hacer que coincida. Bueno, cerrando ese capítulo, hay otras cosas que podemos hacer para mejorar las APIs. Una de ellas es la carga de data. Ahora, la carga de data es un tema enorme. Pero hoy tenemos diferentes formas de manejarlo, y esta es, en mi opinión, una de las razones por las que no es una gran API en este momento. O si hay una API, si no hay una API única. Así que tenemos diferentes formas de hacerlo. Tenemos watch en los parámetros, pero no tenemos solo estado, no errores, no manejo de SSR. Tenemos todos los guardias de navegación, pero se duplican, y puede ser verboso, y definitivamente no está tipado, excepto con el plugin, por supuesto. Luego tenemos guardias de navegación globales, que pueden permitirte crear una solución personalizada de data, y diría que esta es la solución más conveniente. Y luego tenemos suspense, que tengo una diapositiva entera para ellos de todos modos. Pero todos tienen problemas. Todos presentan algunos problemas que no nos permiten usarlos como solución de obtención de data. Así que suspense en la superficie es simplemente perfecto. Solo ponemos un weight en el script. No hay nada tan simple como eso. Y tiene algunas ventajas, como que es muy sencillo de escribir, el más sencillo de escribir,

9. Introducción a los Cargadores de Datos

Short description:

Los cargadores de datos son funciones que devuelven datos y te proporcionan un componible. Proporcionan acceso a los datos, estado de carga, errores y manejan SSR. Exportar cargadores permite su reutilización y evita duplicar solicitudes. Los cargadores pueden ser tipados por defecto y se pueden exportar varios cargadores.

para ser honesto. Pero tiene un manejo de errores. Y maneja SSR de serie. Pero todavía es experimental, aunque debería cambiar pronto. Y lo más importante, no se actualiza en la navegación. No está conectado a la navegación. Está conectado a un componente. Pero estos son dos conceptos diferentes en realidad, aunque pueden estar acoplados si quieres. Y los data están limitados al componente actual. Si quieres usar algo que obtienes en una página, en otros componentes, o lo pones en una tienda o lo pasas como una propiedad o inyectas proveer. Pero tienen algunos problemas. Así que, lo que quiero presentarte son los data cargadores. Entonces, los data cargadores son solo funciones que devuelven data. ¿De acuerdo? Y luego te dan un componible. Este componible, puedes usarlo en el mismo componente, pero también en otros lugares. Y te da acceso a los data en sí, pero también al estado de carga, errores y cosas así. Y maneja SSR, etcétera, etcétera. Ahora, la clave aquí es exportar el cargador. No necesitas escribir el cargador aquí. Puedes escribirlo en cualquier lugar. Pero tiene que ser exportado por la página, para que el enrutador sepa que esta página está cargando esta función. ¿De acuerdo? Estos data. Y luego puedes reutilizarlo de todos modos. Pero esto también significa que estamos duplicando completamente las solicitudes. Entonces, si estás obteniendo el perfil de usuario en muchos lugares, estás utilizando los data de usuario en muchos lugares, todavía hacemos una solicitud. Tenemos toda la paralelización por defecto, pero también puedes hacer que un cargador dependa de otro cargador si quieres. Y son asequibles, porque simplemente estás devolviendo los data. Si no escribimos ningún tipo, todavía va a ser tipado por defecto. Puedes tipar explícitamente si quieres, pero simplemente funciona de serie. Y por supuesto, puedes exportar varios cargadores. Ahora, todo el tema es un poco más largo, y ya no tengo más tiempo. Ya estoy pasando el tiempo. Pero

10. Rutas Predecibles y Menos Código de Plantilla

Short description:

Hacemos rutas predecibles con enrutamiento basado en fallos, permitiendo que nuestra herramienta genere tipos automáticamente. Esto crea un entorno menos propenso a errores con menos código de plantilla y sin cambio de contexto. Consulta las diapositivas en esm.eslash para más información.

Te invito a revisar el RFC, que todavía tiene algo de tiempo. La idea va un poco más allá de eso. Algunas cachés de cliente, algunas cachés simples, algún soporte para Apollo, Yafire, Suba Base, etc. Y todavía es experimental. Para resumir, lo que dije es que hacemos rutas predecibles al tener un enrutamiento basado en fallos, porque tenemos un mapeo uno a uno y sabemos cómo van las cosas. Y esto permite que nuestro tipo, nuestra herramienta, genere los tipos para nosotros. Por lo tanto, tenemos un entorno menos propenso a errores, lo siento, porque tenemos los errores, tenemos, es más probable que no cometamos errores sin la finalización. Sé que tenemos Copilot hoy en día, pero todavía comete errores y el compilador no. Y así tenemos menos código de plantilla porque no hay matriz de rutas y no hay cambio de contexto porque todavía estamos en la página. Lo siento, realmente fui muy rápido porque realmente me estoy pasando de tiempo. Aquí hay algunos enlaces que puedes consultar. Las diapositivas están en esm.eslash, deja de escribir tus rutas, solo las iniciales. Debería ser muy fácil. Y gracias por tu atención.

QnA

Manejo de Rutas Tipadas y Rutas Protegidas

Short description:

Puedes usar rutas tipadas sin enrutamiento basado en archivos, pero requiere trabajo manual y es menos propenso a errores. El plugin no admite Vue 2. El manejo de rutas protegidas con enrutamiento basado en archivos implica la creación de un guardia de navegación o el uso de Metafields. La funcionalidad de desenchufar ViewRouter puede convertirse en parte de u-router como un plugin separado. Los cargadores pueden definirse en un archivo separado e importarse en varios componentos.

Muchas gracias, Eduardo. Eso fue extremadamente interesante. Y me encanta el design de tus diapositivas. Son como super sexy. Bueno. Así que, vamos a revisar las preguntas. Pero antes la primera de todos, ¿puedes usar rutas tipadas sin enrutamiento basado en archivos?

Sí, puedes usar las rutas tipadas sin enrutamiento basado en archivos pero la idea es que estás dividiendo la generación de los tipos y la escritura de las rutas por lo que tienes algo de trabajo manual que hacer, mientras que el punto de tener este enfoque es que los tipos son automáticos y no necesitas preocuparte por ello, por lo que es menos probable que cometas errores, es menos propenso a errores.

Ok, definitivamente tiene sentido.

Ok, entonces vamos a ver lo que tenemos aquí, ¿este plugin soporta Vue 2?

Vue 2? No, no soporta Vue 2 porque los tipos en el router son bastante diferentes por lo que sería una gran, es más una cuestión de tiempo, simplemente no tengo suficiente tiempo para hacer que soporte Vue 2 en este momento.

Ok, ¿quizás en el futuro o? O incluso, dudo que pueda encontrar el tiempo para hacerlo en el futuro pero invito a cualquiera a copiar el código y hacer un fork para Vrouter 2, definitivamente.

Ok, lo has oído, una oportunidad de código abierto.

Entonces, la siguiente, ¿cómo deberíamos manejar las rutas protegidas con enrutamiento basado en archivos?

Así que las rutas protegidas, normalmente creas un guardia de navegación, por lo que todavía crearías tu propio guardia de navegación, de la misma manera. Tienes la instancia del router en algún lugar, así que simplemente router antes de cada uno o antes del resultado. Hay otros patterns que puedes usar con Metafields, puedes definir Metafields en las rutas, eso te permite tener guardias de navegación bastante finos aplicados a múltiples rutas. Así que un solo guardia de navegación que se aplica en múltiples páginas.

OK, genial. Creo que es un poco más difícil de explicar sin un código.

Genial, tiene sentido.

La siguiente es, ¿hay alguna posibilidad de que la funcionalidad de desenchufar ViewRouter se convierta en parte de Sí, probablemente iremos, quiero decir, para hacer eso tenemos que pasar por un RFC primero. La diferencia es que no es, quiero decir que la mayoría del código no es en tiempo de ejecución, ¿verdad? La mayoría del código está incorporado. Así que todavía viene como algo que estará un poco al margen, así que si se convierte en parte de u-router todavía será como un plugin vid que se expone a través de una ruta diferente como u-router slash plugin o algo así.

Ok, genial.

La siguiente es, ¿puedes definir los cargadores en un archivo separado y luego importarlo en múltiples componentes?

Sí, sólo necesitas exportar el cargador desde la página para decirle al router que esta página está utilizando ese cargador. Eso es todo. Y luego usas el composable en cualquier lugar. Entonces, ¿necesitas importar primero el cargador y luego exportar esa importación?

Sí, también puedes hacer simplemente exportar. No lo dije pero tienes dos scripts, tienes el script regular y luego el script de configuración. Así que en el script regular, es donde puedes exportar cosas, y es donde puedes simplemente hacer exportar algo de algo más o puedes importarlo y luego exportarlo porque todavía necesitarás importarlo en la configuración si no lo importas en el otro script. El editor facilita mucho conseguir el comportamiento correcto porque simplemente autocompleta.

Ok, definitivamente tiene sentido.

Manejo de Archivos Index y ID

Short description:

El número de archivos index.vue e id.vue depende de las rutas y cómo se buscan. Si tienes rutas con la misma ruta común pero con nombres diferentes, aún puedes encontrar los archivos fácilmente utilizando la estructura de carpetas. Es como los nodos en un árbol, donde las hojas pueden parecer similares, pero los nodos no.

Y la última pregunta es, ¿no terminaremos con docenas de archivos index.vue e id.vue? ¿Cuándo? O no, ¿no terminaremos con docenas de archivos index.vue e id.vue? Sí, probablemente, pero no necesariamente. Depende si tienes otras rutas que tienen la misma ruta común, pero aún buscas la ruta por el otro nombre. Si tienes una página de usuarios y un usuario / nuevo, tienes un usuario / index y un usuario / nuevo.vue. Entonces, cuando buscas los archivos, buscas el índice de usuarios, o probablemente uses mi espacio de usuario ei, lo siento. Cuando haces un Control-P en tu VSCode, aún encontrarás tu camino muy fácilmente, porque aún tienes la estructura de carpetas que prevalece. OK, sí. Es más como nodos en un árbol en comparación con las hojas. Entonces, las hojas se parecen entre sí, pero los nodos no. OK, perfecto. Muchas gracias, Eduardo. Y siéntete libre de hacer más preguntas arriba en la parte de preguntas y respuestas de los oradores. Y sí, danos un aplauso.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Un Año en Vue 3
Vue.js London Live 2021Vue.js London Live 2021
20 min
Un Año en Vue 3
Top Content
Vue 3 has seen significant adoption and improvements in performance, bundle size, architecture, and TypeScript integration. The ecosystem around Vue 3 is catching up, with new tools and frameworks being developed. The Vue.js.org documentation is undergoing a complete overhaul. PNIA is emerging as the go-to state management solution for Vue 3. The options API and composition API are both viable options in Vue 3, with the choice depending on factors such as complexity and familiarity with TypeScript. Vue 3 continues to support CDN installation and is recommended for new projects.
Vue: Actualizaciones de Características
Vue.js London 2023Vue.js London 2023
44 min
Vue: Actualizaciones de Características
Top Content
The Talk discusses the recent feature updates in Vue 3.3, focusing on script setup and TypeScript support. It covers improvements in defining props using imported types and complex types support. The introduction of generic components and reworked signatures for defined components provides more flexibility and better type support. Other features include automatic inference of runtime props, improved define emits and defined slots, and experimental features like reactive props destructure and define model. The Talk also mentions future plans for Vue, including stabilizing suspense and enhancing computer invalidations.
Los tipos más útiles de React
React Day Berlin 2023React Day Berlin 2023
21 min
Los tipos más útiles de React
Top Content
Today's Talk focuses on React's best types and JSX. It covers the types of JSX and React components, including React.fc and React.reactnode. The discussion also explores JSX intrinsic elements and react.component props, highlighting their differences and use cases. The Talk concludes with insights on using React.componentType and passing components, as well as utilizing the react.element ref type for external libraries like React-Select.
TypeScript y React: Secretos de un matrimonio feliz
React Advanced 2022React Advanced 2022
21 min
TypeScript y React: Secretos de un matrimonio feliz
Top Content
React and TypeScript have a strong relationship, with TypeScript offering benefits like better type checking and contract enforcement. Failing early and failing hard is important in software development to catch errors and debug effectively. TypeScript provides early detection of errors and ensures data accuracy in components and hooks. It offers superior type safety but can become complex as the codebase grows. Using union types in props can resolve errors and address dependencies. Dynamic communication and type contracts can be achieved through generics. Understanding React's built-in types and hooks like useState and useRef is crucial for leveraging their functionality.
Haciendo Magia: Construyendo un Marco de Trabajo Primero-TypeScript
TypeScript Congress 2023TypeScript Congress 2023
31 min
Haciendo Magia: Construyendo un Marco de Trabajo Primero-TypeScript
Top Content
Daniel Rowe discusses building a TypeScript-first framework at TypeScript Congress and shares his involvement in various projects. Nuxt is a progressive framework built on Vue.js, aiming to reduce friction and distraction for developers. It leverages TypeScript for inference and aims to be the source of truth for projects. Nuxt provides type safety and extensibility through integration with TypeScript. Migrating to TypeScript offers long-term maintenance benefits and can uncover hidden bugs. Nuxt focuses on improving existing tools and finds inspiration in frameworks like TRPC.
Nuxt en el Edge
Vue.js London 2023Vue.js London 2023
30 min
Nuxt en el Edge
Nuxt is a web framework with many features including server-side rendering, client-side rendering, static site generation, edge site rendering, and more. The Edge is a limited environment running on CDN nodes, such as Cloudflare network. Database options on the Edge include Postgre with Neon, Versel on Neon, Superbase, MySQL with plan scale, HyperDB, and KV with redis and Cloudflare storage. The speaker demonstrates creating a demo with a votes table, handling API requests, adding authentication, saving votes, and displaying results. The roadmap to a full stack Nuxt 3 with an edge-first experience is in progress. Copilot is a helpful tool for developers. Integrating SSO with GitHub and improving the developer experience are important considerations for Nuxt 3.

Workshops on related topic

React, TypeScript y TDD
React Advanced 2021React Advanced 2021
174 min
React, TypeScript y TDD
Top Content
Featured Workshop
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
Dominando conceptos avanzados en TypeScript
React Summit US 2023React Summit US 2023
132 min
Dominando conceptos avanzados en TypeScript
Top Content
Featured WorkshopFree
Jiri Lojda
Jiri Lojda
TypeScript no es solo tipos e interfaces. Únete a esta masterclass para dominar características más avanzadas de TypeScript que harán tu código a prueba de balas. Cubriremos tipos condicionales y notación de inferencia, cadenas de plantillas y cómo mapear sobre tipos de unión y propiedades de objetos/arrays. Cada tema se demostrará en una aplicación de muestra que se escribió con tipos básicos o sin tipos en absoluto y juntos mejoraremos el código para que te familiarices más con cada característica y puedas llevar este nuevo conocimiento directamente a tus proyectos.
Aprenderás:- - ¿Qué son los tipos condicionales y la notación de inferencia?- ¿Qué son las cadenas de plantillas?- Cómo mapear sobre tipos de unión y propiedades de objetos/arrays.
Consejos y Trucos Profundos de TypeScript
Node Congress 2024Node Congress 2024
83 min
Consejos y Trucos Profundos de TypeScript
Top Content
Featured Workshop
Josh Goldberg
Josh Goldberg
TypeScript tiene un sistema de tipos poderoso con todo tipo de características sofisticadas para representar estados de JavaScript salvajes y extravagantes. Pero la sintaxis para hacerlo no siempre es sencilla, y los mensajes de error no siempre son precisos al decirte qué está mal. Vamos a profundizar en cómo funcionan muchas de las características más poderosas de TypeScript, qué tipos de problemas del mundo real resuelven, y cómo dominar el sistema de tipos para que puedas escribir código TypeScript verdaderamente excelente.
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
React Advanced 2022React Advanced 2022
148 min
Mejores Prácticas y Consejos Avanzados de TypeScript para Desarrolladores de React
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
¿Eres un desarrollador de React tratando de obtener los máximos beneficios de TypeScript? Entonces esta es la masterclass para ti.En esta masterclass interactiva, comenzaremos desde lo básico y examinaremos los pros y contras de las diferentes formas en que puedes declarar componentes de React usando TypeScript. Después de eso, pasaremos a conceptos más avanzados donde iremos más allá de la configuración estricta de TypeScript. Aprenderás cuándo usar tipos como any, unknown y never. Exploraremos el uso de predicados de tipo, guardias y comprobación exhaustiva. Aprenderás sobre los tipos mapeados incorporados, así como cómo crear tus propias utilidades de mapa de tipo nuevo. Y comenzaremos a programar en el sistema de tipos de TypeScript usando tipos condicionales e inferencia de tipos.
Vue3: Desarrollo Moderno de Aplicaciones Frontend
Vue.js London Live 2021Vue.js London Live 2021
169 min
Vue3: Desarrollo Moderno de Aplicaciones Frontend
Top Content
Workshop
Mikhail Kuznetsov
Mikhail Kuznetsov
Vue3 fue lanzado a mediados de 2020. Además de muchas mejoras y optimizaciones, la principal característica que trae Vue3 es la API de Composición, una nueva forma de escribir y reutilizar código reactivo. Aprendamos más sobre cómo usar la API de Composición de manera eficiente.

Además de las características principales de Vue3, explicaremos ejemplos de cómo usar bibliotecas populares con Vue3.

Tabla de contenidos:
- Introducción a Vue3
- API de Composición
- Bibliotecas principales
- Ecosistema Vue3

Requisitos previos:
IDE de elección (Inellij o VSC) instalado
Nodejs + NPM
Embarcándonos en una aventura con Nuxt 3, Motion UI y Azure
JSNation 2022JSNation 2022
141 min
Embarcándonos en una aventura con Nuxt 3, Motion UI y Azure
Workshop
Melanie de Leeuw
Melanie de Leeuw
¡Nos encantan las aplicaciones web fáciles de crear y desplegar! Entonces, veamos qué puede hacer una pila tecnológica muy actual como Nuxt 3, Motion UI y Azure Static Web Apps. Podría ser perfectamente un trío de oro en el desarrollo web moderno. O podría ser una hoguera de errores y problemas. De cualquier manera, será una aventura de aprendizaje para todos nosotros. Nuxt 3 se lanzó hace apenas unos meses y no podemos esperar más para explorar sus nuevas características, como su compatibilidad con Vue 3 y el Motor Nitro. Agregamos un poco de estilo a nuestra aplicación con la biblioteca Sass Motion UI, porque el diseño estático está pasado de moda y las animaciones vuelven a estar de moda.Nuestra fuerza impulsora de la pila será Azure. Las aplicaciones web estáticas de Azure son nuevas, casi listas para producción y una forma ingeniosa y rápida para que los desarrolladores desplieguen sus sitios web. Así que, por supuesto, debemos probar esto.Con algunas Azure Functions esparcidas por encima, exploraremos lo que puede hacer el desarrollo web en 2022.