Haciendo match entre la URL y una ruta
Clase 10 de 13 • Taller de Creación de Router para Single Page App con JavaScript
Contenido del curso
Clase 10 de 13 • Taller de Creación de Router para Single Page App con JavaScript
Contenido del curso
Ivan Andres Diaz Lopez
Carlos Eduardo Diaz Polanco
Alejandro Barba
Ian Vassallo
Rony Porraz Vargas
Camilo Alexander Velandia Velandia
José Heriberto López Ruiz
Nelson Neyen Marquez Romero
Carlos Eduardo Gomez García
Manuel Entrena Jimenez
Juan Sebastian Tello Quinteros
Miguel Angel Muñoz Pozos
Erik Elyager
Juan Carlos Sanchez Pérez
Ignacio Basilio
Jimmy Buriticá Londoño
Sergio Estrella
Alejandro Barba
Sergio Estrella
jorge llanque
Jose Morales Varon
Jesus David Duarte
jesus gomez
Juan Ramirez
Jimmy Buriticá Londoño
Yosef Enmanuel Blandin Rios
Jimmy Buriticá Londoño
Javier Romero
John Cardenas
Sneyder Barreto
Christian Alvarenga
Naldo Duran
kolab Linkear
Helber Fabian Toro
Ricardo Celis
les comparto como funciona de forma visual la funcion .SPLIT(' '). lo que se ponga dentro del parametro de la funcion será el punto de division para el array que se va a crear. en el ejemplo vemos que se divide en 3 partes, dividas por el "/".
Creo que vengo muy bien en los cursos de desarrollo y de Js, pero de este taller no entiendo NADA!
Trata de seguir el rastro por tu cuenta.
<li><button onclick="router.loadRoute('contact')">Contact</button></li>
Por ejemplo, el parámetro contact a donde va y que pasa con él? Así me funciona a mí, toma tiempo, pero funciona :)
Si están así es normal, de por sí tenemos que investigar un tanto más aparte de todo esto ya que apenas y estamos entrando a las API's de manera empírica
Lean esto Es para que se familiaricen con lo de pathNameSplit, en verdad ayudó mucho cuando estaba perdido
Espero les ayude, lo comente para describirlo
hay un error de edicion en el video
¿En cuál minuto y seg.?
Hola, ¿Qué significa "hardcodear"?
Significa poner cosas directamente en el código, por ejemplo, si quisieras hacer un conversor de monedas, tendrías que saber el valor de la moneda actual.
Hardcodear significaría que tú escribas directamente en el código el valor de eas moneda, lo correcto sería consumir algún API que te de de forma actualizada el valor de esa moneda ^^
No soy un experto en JS pero creo que este código
if (routePathSegs.length !== urlSegs.length) { return false; } return routePathSegs.every( (routePathSeg, i) => routePathSeg === urlSegs[i] );
hace en la práctica lo mismo que este
if (routePathSegs === urlSegs){ return true; } return false;
Si me equivoco que me corrijan. Lo único que puedo entender es que por motivos de performance se decida usar esa lógica ya que me imagino un caso donde la lista de routas sega muy grande o porque no es fiable el código que pongo como sustitución.
Me parece que la segunda opción no es correcta debido a que los arrays son objetos. cuando comparamos objetos no se comparan por su valor, sino por su misma espacio en memoria. intenta comparar arrays u objetos para entenderle. Por eso compara la longitud y si es verdadero, ahí si recorre por cada uno de los elementos y compara sus valores. Algo así le entendí xD https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/every https://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript
No entendí su reto profe de que forma quiere que las usemos ??
No veo ningún reto al final de esta clase, podrías elaborar más o señalar a qué clase te refieres, por favor.
El reto es que uses una expresión regular para comparar la rutas en la función _matchUrlToRoute
¿Por que comparamos el largo y no alguna otra cosa?
A continuación explico línea a línea lo que sucede en el método _matchUrlToRoute(urlSegs)
_matchUrlToRoute(urlSegs) { // find recorre cada elemento del array routes y cuando la arrow function retorne true, // entonces almacena el objeto. Ejemplo: // matchedRoute = { path: '/about', template: '<h2>About Me</h2>' } // Si no lo encuentra regresa "undefined" const matchedRoute = this.routes.find(route => { // routePathSegs = 'about' const routePathSegs = route.path.split('/').slice(1); // Primera validación, si las rutas no tienen el mismo largo son diferentes y regresa false. // entonces find debe buscar en el siguiente objecto del array routes if (routePathSegs.length !== urlSegs.length) { return false; } // every compara letra a letra las dos rutas, si son iguales regresa true, de lo contrario regresa false. return routePathSegs .every((routePathSeg, i) => routePathSeg === urlSegs[i]); }); // regresa el objeto matchedRoute = { path: '/about', template: '<h2>About Me</h2>' } return matchedRoute; }
Documentación Método find Método every
No entendí el funcionamiento del every() :/
Compara dos arreglos recorriendo posición por posición.Es decir compara la primera letra de la primer cadena con la primera letra de la segunda cadena, luego la segunda letra de la primera cadena con la de la segunda cadena y así sucesivamente y si en algún punto las letras no son iguales entonces retorna false.
Ya veo! Ya me quedó un poco más claro, gracias :D
Esta clase fue muy desafiante
Mientras más veo contenido JS más me doy cuenta de lo que me falta por aprender.
Si no estan claros acerca del metodo .Slice aqui les dejo un Enlace con la documentacion
no entendi ¿para que es el .every? ¿que es lo que hace?
Every() lo que hace es comprobar que routePathSeg y urlSegs[i], sean estrictamente iguales. Si es así, va a retornar un true, sino va a retornar false. Si quieres saber más sobre esta funcionalidad de JavaScript Aqui te dejo un link
every se usa para comparar elemento a elemento de dos array. y de esta forma saber si son iguales. En este caso va a comparar letra a letra, nuestras dos rutas y si son iguales regresa true, de lo contrario regresa false.
¿Para que usa el slice si ya el split esta eliminando el slash?
El split crea un array de 2 elementos
["", "contacto"]
El slice toma el elemento 1
["contacto"]
El cual es el dato que necesitamos
me confunde lo siguiente esto -> !== <- lo que esta haciendo ahí es negar o estoy equivocado ??
No estás equivocado. Eso es una negación o desigualdad, como quieras llamarlo. En esta clase se usó para decir: "Si los dos operadores no son lo mismo, ejecuta esto"
¡Hola!
Muy buena respuesta la de @johncardenasp.
Lo único que agregaría es que el ! es un operador lógico de negación (NOT). Te comparto algo de documentación acerca de operadores lógicos que seguramente te ayuda a aclarar un poco más esto.
Un saludo.
Creo que todavía me falta mucho para aprender a programar de esa manera pero, me está gustando de igual manera. 😁
f
en el navegador me da error porque no puede encontrar la variable route
Hola! qué navegador es? hay que revisar!
sí porfa! compártenos tu código