¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. React
  3. Next.js, el framework React por Vercel
Extrait - React Desarrolle el Front End de sus aplicaciones web y móviles con JavaScript
Extractos del libro
React Desarrolle el Front End de sus aplicaciones web y móviles con JavaScript Volver a la página de compra del libro

Next.js, el framework React por Vercel

Introducción

Next.js es un framework de desarrollo web para React, creado por la empresa Vercel. Ha crecido en popularidad y se ha convertido en la opción preferida para crear aplicaciones web modernas y optimizadas. Incluso se menciona en la documentación oficial de React.

1. ¿Por qué Next.js?

Este framework fue diseñado para resolver algunos de los desafíos comunes asociados con el desarrollo de aplicaciones web con React. Aquí analizamos algunas de las razones por las que Next.js se ha hecho tan popular.

a. Renderizado del lado del servidor (SSR) y generación de sitios estáticos (SSG)

Next.js soporta el renderizado del lado del servidor (Server-Side Rendering o SSR) así como la generación de sitios estáticos (Static Site Generation o SSG). Esto significa que las páginas pueden generarse del lado del servidor antes de ser enviadas al navegador. Las páginas se muestran más rápidamente y también están mejor optimizadas para los motores de búsqueda.

Para entender completamente SSR, es esencial considerarlo junto con el clásico Client-Side Rendering (CSR) utilizado con React en todos nuestros ejemplos anteriores.

En CSR, cuando se solicita una página web, el servidor envía un archivo HTML mínimo con enlaces a scripts JavaScript. A continuación, el navegador ejecuta estos scripts, que renderizan el contenido...

Creación de un sitio con Next.js

Crear un sitio con Next.js es rápido y sencillo, gracias a su estructura de proyectos bien organizada y a sus funciones integradas.

1. Creación de un proyecto Next.js

Para crear un proyecto Next.js, abre su terminal y ejecute el siguiente comando:

npx create-next-app@latest 

A continuación, la herramienta de creación formula una serie de preguntas:

What is your project named? my-app  
Would you like to use TypeScript? No / Yes  
Would you like to use ESLint? No / Yes  
Would you like to use Tailwind CSS? No / Yes  
Would you like to use `src/` directory? No / Yes  
Would you like to use App Router? (recommended) No / Yes  
Would you like to customize the default import alias? No / Yes  
What import alias would you like configured? @/* 

Ya hemos hablado de ESLint y Tailwind, así que podemos responder favorablemente a la propuesta de la herramienta en estos dos puntos. Next.js ahora recomienda usar el App Router, por el momento rechaza esta propuesta.

A continuación, puede ejecutar el siguiente comando para iniciar el proyecto. Será accesible en http://localhost:3000.

npm run dev 

Si todo va bien, debería aparecer la página de inicio de Next.js.

La estructura de su proyecto Next.js se organizará de forma intuitiva. La carpeta pages es una de las más importantes, ya que contiene archivos para cada...

Navegación entre las páginas

La navegación entre páginas es una parte esencial del desarrollo web. En Next.js, la navegación es sencilla e intuitiva gracias al soporte de enrutamiento integrado.

1. Utilización del componente Link

Next.js proporciona el componente Link, que crea enlaces entre páginas de forma optimizada para el pre-renderizado del lado del servidor.

He aquí cómo acceder a la página Acerca de con un enlace desde la página de inicio:

import Link from 'next/link';  
  
const Home = () => {  
  return (  
    <div>  
      <h1>Accueil</h1>  
      <Link href="/about">  
        <a>Nosotros</a>  
      </Link>  
    </div>  
  );  
};  
  
export default Home; 

Al hacer clic en el enlace, Next.js cargará la parte de nuestra página web correspondiente al componente about.js sin actualizar la página completa.

2. Ruta dinámica

Next.js admite el enrutamiento dinámico, lo que significa que puede crear rutas con parámetros variables.

Por ejemplo, si tiene...

Gestión de assets

1. Archivos públicos

Next.js tiene una carpeta especial llamada public donde puedes colocar assets estáticos como imágenes, archivos CSS y archivos JavaScript. Estos archivos también pueden almacenarse en caché utilizando una CDN para optimizar la accesibilidad a estos recursos. También es el lugar ideal para colocar tus archivos de tipo robots.txt o el favicon de tu sitio.

Coloque sus assets en la carpeta pública de la siguiente manera:

my-next-site/  
└── public/  
    ├── images/  
    │   ├── logo.png 

Para hacer referencia a estos assets en sus componentes, utilice el prefijo / seguido de la ruta relativa desde la carpeta pública.

Por ejemplo:

// En un componente  
import React from 'react';  
  
const MyComponent = () => {  
  return (  
    <div>  
      <img src="/images/logo.png" alt="Logo" />  
    </div>  
  );  
};  
  
export default MyComponent; 

2. Carga de imágenes

A diferencia de la etiqueta <img> estándar con la que quizá ya esté familiarizado...

Utilizar SWR, el equivalente de React Query

SWR (Stale-While-Revalidate) es una biblioteca para la gestión eficiente de datos en aplicaciones React utilizando la estrategia de caché Stale-While-Revalidate.

1. Instalación de SWR

Para empezar a utilizar SWR en su proyecto Next.js, debe instalar la biblioteca asociada.

 Utilice el siguiente comando:

npm i swr 

2. Utilización de SWR

El funcionamiento de SWR se basa en hooks de React, lo que hace que su uso sea intuitivo y familiar.

A continuación, se explica cómo utilizar SWR para gestionar los datos de los componentes Next.js:

import useSWR from 'swr';  
  
const MyComponent = () => {  
  // Utilización de SWR para recuperar los datos  
  const { data, error, isLoading } = useSWR('/api/data', fetch);  
  
  if (error) return <p> Error de carga de datos.</p>;  
  if (isLoading) return <p> Carga en curso...</p>;  
  
  return (  
    <div>  
      <h1>Datos de API</h1>  
      <pre>{JSON.stringify(data, null, 2)}</pre>:  
    </div>  
  );  
};  
  ...

Renderizado del lado del servidor y generación de sitios estáticos

1. Renderizado del lado del servidor (SSR)

La renderización del lado del servidor permite generar el contenido de la página en el servidor antes de enviarlo al navegador. Esto mejora la referenciación, la accesibilidad y el rendimiento de la aplicación.

Para habilitar el renderizado del lado del servidor, usted puede utilizar la función asíncrona getServerSideProps en sus páginas. Este método devuelve los datos necesarios para generar la página en el servidor.

// pages/article/[id].js  
import { useRouter } from 'next/router';  
  
const ArticleDetail = ({ article }) => {  
  return (  
    <div>  
      <h1>{article.title}</h1>  
      <p>{article.content}</p>  
    </div>  
  );  
};  
  
export async function getServerSideProps(context) {  
  const { id } = context.query;  
  const res = await fetch(`https://api.example.com/article/${id}`); 
  const article = await res.json();  
  
  return...

Presentación de React Server Components (RSC)

Los componentes de React, o RSC (React Server Components), representan una evolución significativa en la manera en que construimos aplicaciones React, aportando una serie de beneficios potenciales, así como desafíos.

El objetivo es reducir la cantidad de información que pasa por la red, simplemente reduciendo el tamaño de la respuesta del servidor. El servidor sólo envía lo mínimo imprescindible.

Las RSC aún no se consideran una API React estable que pueda utilizarse en producción. El tiempo dirá si algún día llegarán a serlo. Sin embargo, Next.js ofrece utilizarlas en su última versión estable: 13.5.

Tomemos un ejemplo sencillo de un componente del lado del servidor para ilustrar este punto:

// app.js  
import { format } from 'date-fns'  
  
export const App = ({user}) => {  
    const birthday = format(user.birthday)  
  
  return (  
          <div>  
                 <p>{user.name}</p>  
                 <p>{`Fecha...