Creando un enrutador con vainilla javascript

🚚 lóxica para o enrutador dun spa

A lóxica detrás dun enrutador contén os seguintes pasos.

  1. Cargar a ruta. Identificar onde estamos no sitio. Faise a través dunha carga inicial da ruta.
  2. Comparar a URL cunha das nosas rutas. O URL que queremos mover, debe ser comparado coas rutas que temos xa que a ruta solicitada debe estar entre as nosas rutas definidas para ser cargadas.
  3. Actualizar a ruta na barra de navegación. Para iso, podemos usar un método HTML coñecido como pushState. Este método forma parte do obxecto da xanela do noso navegador windows.history.pushState. Este método engádenos un estado ao noso historial de navegación e ao engadir un novo estado reflíctese na barra de navegación.
  4. Actualice o sano co novo. O novo contido pode ser enviado a través de innerHTML.

🏗 Arquitectura da nosa aplicación

Arquitectura para esta aplicación contempla un HTML Ficheiro onde vai vivir o noso TEMLATE que recibirá o contido que cambiará o domingo.

Por outra banda, a lóxica da aplicación estará nos nosos ficheiros .js que serán tres como se mostra no seguinte diagrama.
IV id = “Arquitectura da aplicación

Estrutura do cartafol con que imos traballar.

|- root|-- /js|--- index.js|--- router.js|--- routes.js|-- index.html|-- style.css

🧭 Por que SPA?

O SPA Como o seu nome indica que son unha páxina única páxina web e a navegación dentro de que ocorre sen necesidade de recargar o navegador.

💡 O obxectivo de realizar o enrutamento con JavaScript Vanilla é comprender o funcionamento das bibliotecas de enrutamento dos marcos.

Para traballar coa URL usaremos a API de Historial, que non é unha característica de JavaScript, se non o navegador. Esta API trae un método chamado pushState que nos axuda a levar os datos da pila da navegación.

🖥 Imos ao código

Comezamos Dar estrutura ao noso modelo HTML. Lembre que a funcionalidade desta pequena práctica é facer un enrutador con vainilla de JavaScript para que o noso modelo sexa o máis sinxelo posible.

<!DOCTYPE html><html lang="es"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>SPA Routing</title> <link rel="stylesheet" href="style.css"></head><body> <!-- Botones de navegación --> <header> <button onclick="ROUTER.load('home')">Home </button> <button onclick="ROUTER.load('about')">About</button> <button onclick="ROUTER.load('contact')">Contact</button> </header> <!-- Aquí es donde se insertará el contenido según la página en la que nos encontremos --> <div></div> <!-- En estos archivos estará la mágica para la navegación --> <script src="./js/router.js"></script> <script src="./js/routes.js"></script> <script src="./js/index.js"></script></body></html>

Co noso modelo HTML realizado o seguinte paso será definir o noso dicionario de ruta, aquí será unha lista de todas as rutas dispoñibles dentro do noso spa e o contido de cada un deles.

const PATHS = { home: { path: "/", template: `<h1>🏠 Home</h1>`, }, about: { path: "/about", template: `<h1>👩🏻‍💻 Sobre mi</h1>`, }, contact: { path: "/contact", template: `<h1>📱 Contacto</h1>`, }}

O seguinte ficheiro para traballar será o que contén toda a lóxica para operar as nosas rutas, se agora traballamos no

En que definiremos unha clase chamada , esta clase é a que inicializaremos no noso index.js, pero iso verá máis tarde. r /

class Router {

O primeiro será definir un constructor para a nosa clase. As funcións deste constructor cargaranse a lista de rutas e inicializan o enrutador.

co noso creador creado Nós Escribirá a lóxica para iniciar o enrutador. Esta función é responsable de identificar a ruta na que se atopa o noso navegador.

 initRouter() { const { location: { pathname = "/" } } = window; const URL = pathname === "/" ? "home" : pathname.replace("/", ""); this.load(URL); }

coa ruta identificada, nós Pode comezar a traballar na función que será a encargada de cargar as páxinas que desexa visualizar ao usuario. Esta será a función load que recibe por defecto o parámetro de home como queremos que o contido sexa o contido principal do noso spa .

 load(page = "home") { const { paths } = this; const { path, template } = paths || paths.error; const $CONTAINER = document.querySelector("#content"); $CONTAINER.innerHTML = template; window.history.pushState({}, "done", path); }}

Agora con toda a lóxica do noso enrutador construído, só queda inicializar a clase no

.

const ROUTER = new Router(PATHS);

agora para probar correctamente o noso pequeno spa que é necesario ter un servidor local. Isto pódese implementar de moitas maneiras, pero recomendo que se está a usar VSCode, instale o servidor en directo que facilitará a súa vida.

→ Liveserver

✅ Conclusións

Esta sería de forma moi básica a forma en que os enrutadores dalgúns marcos de JavaScript funcionan como angulares ou vidas. Personalmente non recomendo “a man” o enrutador a menos que sexa un proxecto moi pequeno. O mellor é usar as implementacións de cada marco.

Aínda que por suposto, sempre é bo romper as cousas e coñecer a partir das bases.

Pódese atopar o código de código no meu repositorio GitHub. Aquí deixo a ligazón.

→ Vanilla Router Spa

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *