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.
  • Cargar la ruta.elsitio에서 새로운 이름을 식별했습니다.Se realization a través de una carga inicial de la ruta.
  • 비교자 la URL con una de nuestras rutas.La URL a La que nos queremos mover,se debe compariar con las rutas que tenemos ya que La ruta requestada debe de estar entre nuestras rutas definidas para poder ser cargada.
  • Actualizar la ruta en la barra de navegación.Para esto podemos utilizar un método de HTML conocido comopushState.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.
  • Actualizar el DOM con el nuevo contigo.El nuevo contenido se puede mandar a través deinnerHTML.
  • 🏗 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.jslos 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 llamadopushStateque 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ónloadque recibe por defecto el parámetro dehomeya 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

    좋은 웹페이지 즐겨찾기