Sviluppatore che lavora a un progetto Next.js e React su monitor luminoso in ambiente moderno

Next.js per iniziare con React moderno

Se usi già React ma non hai mai provato Next.js, questo articolo fa da ponte. Imparerai come sfruttare routing, SSR e SSG per avere siti più veloci e ottimizzati per la SEO.

Next.js per iniziare con React moderno

Se sviluppi con React e cerchi performance, SEO e una developer experience superiore, la combinazione Next.js React è la soluzione definitiva. Questo framework production-ready estende React, risolvendo nativamente problemi complessi come il rendering e il routing.

Il Problema: I Limiti di una Create React App (CRA) Standard

Una classica applicazione React creata con `create-react-app` è un’ottima base, ma soffre di alcune limitazioni intrinseche. Essendo una Single Page Application (SPA) renderizzata interamente lato client, incontra due ostacoli principali: un’indicizzazione SEO difficoltosa per i motori di ricerca e tempi di caricamento iniziale (First Contentful Paint) potenzialmente lenti.

Next.js affronta questi problemi di petto, offrendo soluzioni eleganti e integrate senza sacrificare la potenza e la flessibilità di React.

Cos’è Next.js e Perché Sceglierlo?

Next.js è un framework React open-source creato da Vercel. Fornisce una struttura e una serie di ottimizzazioni che permettono di costruire applicazioni web full-stack, veloci e SEO-friendly. Non sostituisce React, ma lo potenzia.

I suoi pilastri fondamentali sono:

  • Hybrid Rendering: Scegli tra Server-Side Rendering (SSR) o Static Site Generation (SSG) per pagina.
  • File-Based Routing: La struttura delle cartelle definisce automaticamente le rotte dell’applicazione.
  • API Routes: Crea endpoint API serverless direttamente all’interno del tuo progetto.
  • Ottimizzazioni Automatiche: Image optimization, code splitting e prefetching di default.

Il Routing File-Based: Semplificare la Navigazione

Dimentica complessi pacchetti di routing. Con Next.js, la struttura delle rotte è definita dalla struttura dei file nella cartella `pages` (o `app` nelle versioni più recenti).

Una struttura di file come questa:


pages/
├── index.js      # Mappato a /
├── about.js      # Mappato a /about
└── posts/
    └── [slug].js # Mappato a /posts/:slug (rotta dinamica)
        

Creare una nuova pagina è semplice come creare un nuovo file. Ad esempio, `pages/contatti.js` diventerà accessibile all’URL `/contatti`.


// pages/contatti.js

function ContattiPage() {
  return <h1>Contattaci</h1>;
}

export default ContattiPage;
        

SSR vs SSG: Rendering Strategico con Next.js React

Questa è una delle funzionalità più potenti. Next.js permette di decidere, pagina per pagina, come il contenuto debba essere renderizzato.

Server-Side Rendering (SSR) in Pratica con `getServerSideProps`

Con SSR, la pagina viene pre-renderizzata sul server ad ogni richiesta. È ideale per pagine con dati che cambiano frequentemente, come una dashboard utente.

Per implementarlo, esporta una funzione asincrona chiamata `getServerSideProps` dalla tua pagina.


// pages/dashboard.js

export async function getServerSideProps(context) {
  const res = await fetch(`https://api.example.com/user/data`);
  const data = await res.json();

  // I dati verranno passati come props al componente
  return { props: { data } };
}

function DashboardPage({ data }) {
  // Renderizza i dati qui
  return (
    <div>
      <h1>Dashboard Utente</h1>
      <p>Benvenuto, {data.name}</p>
    </div>
  );
}

export default DashboardPage;
        

Static Site Generation (SSG) per Performance Massime con `getStaticProps`

Con SSG, la pagina viene generata come file HTML statico al momento della build. Questo garantisce performance fulminee ed è perfetto per pagine i cui contenuti non cambiano ad ogni richiesta, come articoli di un blog o pagine marketing.

Si implementa esportando una funzione asincrona chiamata `getStaticProps`.


// pages/posts/[slug].js

export async function getStaticProps({ params }) {
  const res = await fetch(`https://api.example.com/posts/${params.slug}`);
  const post = await res.json();

  return { props: { post } };
}

// getStaticPaths è necessario per le rotte dinamiche in SSG
export async function getStaticPaths() {
  const res = await fetch('https://api.example.com/posts');
  const posts = await res.json();

  const paths = posts.map((post) => ({
    params: { slug: post.slug },
  }));

  return { paths, fallback: false };
}

function PostPage({ post }) {
  return (
    <article>
      <h1>{post.title}</h1>
      <div>{post.content}</div>
    </article>
  );
}

export default PostPage;
        

Conclusione: Il Prossimo Passo per il Tuo Sviluppo React

Adottare Next.js non significa abbandonare React, ma elevarlo. Offre soluzioni out-of-the-box per problemi reali di performance, SEO e organizzazione del codice, permettendoti di concentrarti sulla creazione di interfacce utente eccezionali.

Se vuoi costruire applicazioni web moderne, veloci e scalabili, la combinazione Next.js React è senza dubbio lo stack tecnologico da padroneggiare. Inizia oggi il tuo primo progetto e scopri una developer experience di livello superiore.