Next.js


¿Qué es Next.js?

Next.js es un framework de React que te permite crear aplicaciones web completas con renderizado híbrido (tanto del lado del servidor como del cliente). Desarrollado por Vercel, se ha convertido en el estándar de facto para aplicaciones React en producción.

¿Para qué sirve Next.js?

Next.js es ideal para:

  • Crear aplicaciones web full-stack con React.
  • Sitios web con excelente SEO y performance.
  • E-commerce, dashboards y aplicaciones empresariales.
  • APIs y backends integrados con el frontend.
  • Aplicaciones que necesitan renderizado del lado del servidor.

¿Cómo funciona?

Next.js extiende React con funcionalidades listas para producción. Imagina React como un motor de coche potente, y Next.js como el chasis completo con ruedas, frenos y GPS - te da todo lo necesario para crear una aplicación real.

Ejemplo: Página básica en Next.js

Next.js usa file-based routing, donde cada archivo en pages/ o app/ se convierte automáticamente en una ruta.

// pages/index.js (o app/page.js en App Router)
import { useState } from 'react';

export default function Home({ posts }) {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>Mi Blog con Next.js</h1>
      <p>Contador: {count}</p>
      <button onClick={() => setCount(count + 1)}>
        +1
      </button>
      
      <div>
        <h2>Posts del Blog</h2>
        {posts.map(post => (
          <article key={post.id}>
            <h3>{post.title}</h3>
            <p>{post.excerpt}</p>
          </article>
        ))}
      </div>
    </div>
  );
}

// Esta función se ejecuta en el servidor
export async function getStaticProps() {
  const posts = await fetch('https://api.ejemplo.com/posts').then(r => r.json());
  
  return {
    props: { posts }, // Se pasan como props al componente
    revalidate: 60    // Regenera cada 60 segundos
  };
}

Tipos de renderizado

Next.js ofrece múltiples estrategias de renderizado:

1. Static Site Generation (SSG)

// Se genera en build time
export async function getStaticProps() {
  const data = await fetchData();
  return { props: { data } };
}

2. Server-Side Rendering (SSR)

// Se ejecuta en cada request
export async function getServerSideProps() {
  const data = await fetchData();
  return { props: { data } };
}

3. Incremental Static Regeneration (ISR)

export async function getStaticProps() {
  return {
    props: { data },
    revalidate: 10 // Regenera cada 10 segundos
  };
}

4. Client-Side Rendering (CSR)

// Renderizado en el cliente, como React tradicional
import { useEffect, useState } from 'react';

export default function ClientPage() {
  const [data, setData] = useState(null);
  
  useEffect(() => {
    fetch('/api/data').then(r => r.json()).then(setData);
  }, []);
  
  return <div>{data ? data.message : 'Cargando...'}</div>;
}

API Routes integradas

Next.js permite crear APIs directamente en tu aplicación:

// pages/api/users.js o app/api/users/route.js
export default function handler(req, res) {
  if (req.method === 'GET') {
    res.status(200).json([
      { id: 1, name: 'Ana' },
      { id: 2, name: 'Luis' }
    ]);
  } else if (req.method === 'POST') {
    // Crear nuevo usuario
    const newUser = req.body;
    res.status(201).json({ message: 'Usuario creado', user: newUser });
  }
}

Características principales

  • File-based routing: Las rutas se crean automáticamente basadas en archivos.
  • Renderizado híbrido: SSG, SSR, ISR y CSR en la misma aplicación.
  • API Routes: Crea endpoints de API sin servidor separado.
  • Optimizaciones automáticas: Code splitting, image optimization, font optimization.
  • TypeScript nativo: Soporte completo sin configuración.
  • CSS integrado: CSS Modules, Sass, Tailwind CSS listos para usar.

Optimizaciones automáticas

import Image from 'next/image';
import Link from 'next/link';

export default function OptimizedPage() {
  return (
    <div>
      {/* Optimización automática de imágenes */}
      <Image 
        src="/hero.jpg" 
        alt="Hero"
        width={800} 
        height={400}
        priority // Carga prioritaria
      />
      
      {/* Prefetch automático de rutas */}
      <Link href="/about">
        Sobre nosotros
      </Link>
    </div>
  );
}

App Router vs Pages Router

Next.js ofrece dos sistemas de enrutamiento:

Pages Router (tradicional)

pages/
  index.js          → /
  about.js          → /about  
  blog/
    index.js        → /blog
    [slug].js       → /blog/:slug

App Router (nuevo)

app/
  layout.js         → Layout raíz
  page.js           → /
  about/
    page.js         → /about
  blog/
    layout.js       → Layout del blog
    page.js         → /blog
    [slug]/
      page.js       → /blog/:slug

¿Cuándo usar Next.js?

  • Aplicaciones React complejas que necesitan SEO.
  • E-commerce y sitios con mucho contenido.
  • Dashboards y aplicaciones empresariales.
  • Blogs y sitios de contenido dinámico.
  • Cuando necesitas full-stack con React.
  • Aplicaciones que requieren performance extrema.

Comparación rápida

CaracterísticaReact puroNext.js
SEO❌ Limitado✅ Excelente
Performance🟡 Manual✅ Automática
Routing📦 React Router✅ Integrado
API Backend❌ Servidor separado✅ API Routes
Optimizaciones🟡 Configuración manual✅ Automáticas
Deploy🟡 Complejo✅ Simple

Conclusión

Next.js ha revolucionado el ecosistema de React al proporcionar una solución completa y optimizada para aplicaciones web modernas. Te permite enfocarte en construir funcionalidades mientras el framework se encarga de la performance, SEO y optimizaciones.

Con su renderizado híbrido y optimizaciones automáticas, Next.js es la elección ideal cuando necesitas crear aplicaciones React que sean rápidas, escalables y amigables con los motores de búsqueda.


Usamos cookies para mejorar tu experiencia. ¿Aceptas las cookies de análisis?