Creando un Router con Vanilla JavaScript
13305 단어 spanishjavascript
🚚 Lógica para el Router de una SPA
La lógica detrás de un enrutador contiene los siguientes pasos.
pushState
.Este método forma parte del objeto window de nuestro navegadorwindows.history.pushState
.Este método nos agrega un estado a nuestra historia de navegación y al agregar un estado nuevo se refleja en la barra de navegación.innerHTML
.🏗 Arquitectura de nuestra aplicación
La arquitectura para esta aplicación contempla un archivo HTML donde viviránuestro template el cual recibiráel contenido que va a estar cambiando en el DOM.
Por otro lado la lógica de la aplicación estaráen nuestros archivos
.js
los cuales serán tres como se muestra en el siguiente diagrama.카펫 구조.
|- root
|-- /js
|--- index.js
|--- router.js
|--- routes.js
|-- index.html
|-- style.css
🧭 ?Por quéSPA?
Las SPA como su nombre lo indica son páginas web de una sola página y la navegación dentro de ella ocurre sin la necesidad de recargar el navegador.
💡 El propósito de realizar el routing con JavaScript vanilla es entender el funcionamiento de las librerías de routing de los frameworks.
Para trabajar con la URL haremos uso de la API history,la cual no es una característica propia de JavaScript si no del navegador.Esta API trae un método llamado
pushState
que nos ayuda a traer los datos del stack de la navegación.🖥 바모스 알 코디고
Empezamos dandole estructura nuestro 템플릿 de HTMLRecordemos que la functionalidad de esta pequeña practica es hacer un router con JavaScript Vanilla por lo que nuestro template serálo más sencillo 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 id="Home" onclick="ROUTER.load('home')">Home </button>
<button id="About" onclick="ROUTER.load('about')">About</button>
<button id="Contact" 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 id="content"></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>
HTML Realization do el siguiente paso ser á definir nuestro diccionario de rutas, aq íestar á una lista de todas las rutas disponibles dentro de nuestra SPA y el contenido de cada una de ellas.const PATHS = {
home: {
path: "/",
template: `<h1>🏠 Home</h1>`,
},
about: {
path: "/about",
template: `<h1>👩🏻💻 Sobre mi</h1>`,
},
contact: {
path: "/contact",
template: `<h1>📱 Contacto</h1>`,
}
}
El archivo siguiente a trabajar seráEl que contiene toda la lógica para hacer functionar nuestras rutas,si ahora trabajaremos en Elrouter.js
.En el cual definiremos una clase llamadaRouter
,esta clase es la que inicializaremos En nuestroindex.js
,pero eso lo veremos más adelante.class Router {
Lo primero serádefinir un constructor para nuestra clase.Las functiones de este constructor serácargar nuestro listado de rutas e inicializar el router. constructor(paths) {
this.paths = paths;
this.initRouter();
}
Con nuestro constructor creado escribiremos la lógica para iniciar el router.Esta función se encarga de identificar la ruta en la que se encuntera nuestro navegador. initRouter() {
const { location: { pathname = "/" } } = window;
const URL = pathname === "/" ? "home" : pathname.replace("/", "");
this.load(URL);
}
Con la ruta identicada,podemos empezar a trabajar en la functión que se encargaráde cargar las páginas que desee visualizar el usuario.Esta serála funciónload
que recibe por defecto el parámetro dehome
ya que queremos que ese contenido sea el contenido principal de nuestra SPA. load(page = "home") {
const { paths } = this;
const { path, template } = paths[page] || paths.error;
const $CONTAINER = document.querySelector("#content");
$CONTAINER.innerHTML = template;
window.history.pushState({}, "done", path);
}
}
Ahora con toda la lógica de nuestro router construida sólo nos resta inicializar la clase en elindex.js
.const ROUTER = new Router(PATHS);
Ahora para poder probar correcemente nuestra pequeña SPA es necesario tener un servidor local.Esto se puede implementar de muchas maneras pero yo recommiendo que si están usando VSCode instalen el Live Server el cual les harála vida más fácil.→ LiveServer
✅ 결론 ES
Esta sería de una forma muy básica la forma en que trabajan los routers de algunos frameworks de JavaScript como Angular o Vue.En lo personal no recommiendo realizar“a mano”el router a menos que vaya a ser un proyecto muy pequeñito.Lo mejor es utilizar las implementations propias de cada framework.
Aunque claro,siempre es bueno destripar un poco las cosas y conocer desde las base.
El código del artículo lo pueden encontrar en mi repositorio de GitHub.아규레스 데조 엘 엔라스.
→ Vanilla Router SPA
Reference
이 문제에 관하여(Creando un Router con Vanilla JavaScript), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alexcamachogz/creando-un-router-con-vanilla-javascript-27pl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)