Joaquin Solís

Introduccion a NextJS

Notas del curso de NextJs de Jonathan Alvarez. Link

Requisitos previos para instalar Next

  • Node

  • Git

  • Browser

Como instalar Next

De forma Automatica

 yarn create next-app

De forma manual

crear carpeta del proyecto y abrir la consola dentro de la carpeta

npm init -y
yarn add next react react-dom

Cambiar los scripts que necesita Next en el package.json

"dev": "next",
"build":"next build",
"start": "next start"

Crear carpeta "pages" dentro del proyecto

Ahora podemos inicializar con "yarn dev". Si accedemos al localhost:3000 nos marcara un 404 porque todavia no hay paginas en el proyecto pero ya esta corriendo en Next.

Routes

  • Dinamicas

Ej: La pagina de user es adaptado a cada usuario

  • Estaticas

Ej : la pagina de About es siempre la misma

Crear el home como ruta estatica

Vamos a crear un archivo index.js en la carpeta pages y vamos a colocar nuestro primer componente de React

import React from 'react'

const Home = () => {
    return (
        <div>
            <h1>Hola Mundo</h1>
        </div>
    );
};

export default Home;

Si accedes de nuevo al localhoost:3000 veras la pagina de home, NextJS toma el archivo index como el home por defecto. Ahora cada archivo javascript que creemos en la carpeta pages sera una ruta para nuestra pagina. Si creamos un archivo llamado about.js con un componente similar al del home:

import React from 'react'

const About= () => {
    return (
        <div>
            <h1>Este es el about</h1>
        </div>
    );
};

export default About;

Podremos acceder a la ruta localhoost:3000/about directamente y nos mostrara ese texto.

Hasta ahora tenemos el index y el about como paginas estaticas. Ahora veamos una pagina dinamica como seria los detalles de un producto.

Si la ruta seria /product/[idDelProducto] primero tengo que crear la carpeta de product y dentro de la carpeta crear un archivo js con el nombre entre corchetes [ ].

  • Creamos entonces el archivo [id].js en la carpeta product.

Dentro del archivo [id].js creamos un componente, y presta atencion a la palabra id del query.

import React from 'react';
import { useRouter } from 'next/router'

const ProductItem = () => {

    const router = useRouter();
    return (
        <div>
            <h1>Este es el producto {router.query.id}</h1>
        </div>
    );
};

export default ProductItem;

Como mencionaba el id del query representa el nombre del archivo js entre corchetes. Si el nombre era [idProduct].js entonces el query seria router.query.idProduct.

Ahora podemos escribirlo mas simple destructurando el useRouter();

import React from 'react';
import { useRouter } from 'next/router'

const ProductItem = () => {

    const { query : { id },} = useRouter();
    return (
        <div>
            <h1>Este es el producto {id}</h1>
        </div>
    );
};

export default ProductItem;

Next nos ofrece el componente Link para que la navegacion sea mas rapida, esto se debe a que la navegacion se lleva a cabo del lado del cliente (SPA) y no del servidor. Entonces las paginas no se vuelven a recargar cada vez que nos movemos entre paginas.

El componente Navbar que iria en cada pagina seria:


import React from 'react'
import Link from 'next/link'

const Navbar = () => {
    return (
        <nav>
            <menu>
                <Link href="/">
                    <a >Home</a>
                </Link>
                <Link href="/about">
                    <a >About</a>
                </Link>
            </menu>
        </nav>
    );
};

export default Navbar;