window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Strategie di recupero dei dati in NextJS - The Codest
The Codest
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Industrie
    • Fintech e banche
    • E-commerce
    • Adtech
    • Tecnologia della salute
    • Produzione
    • Logistica
    • Automotive
    • IOT
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
Freccia indietro TORNA INDIETRO
2021-04-09
Sviluppo di software

Strategie di recupero dei dati in NextJS

The Codest

Pawel Rybczynski

Software Engineer

Recentemente, NextJS sta guadagnando sempre più popolarità come metodo per costruire applicazioni React. Sicuramente un contributo importante è dato dal fatto che NextJS offre diverse strategie di recupero dei dati.

E questi sono:

  • Rendering lato client: CSR,
  • Rendering lato server: SSR,
  • Rendering statico del sito: SSG,
  • Rigenerazione statica incrementale: PVR.

NextJS, a differenza della semplice applicazione React, offre una funzione chiamata pre-rendering. Ciò significa che l'HTML prerenderizzato viene visualizzato durante il caricamento iniziale. Nelle applicazioni React tradizionali, l'intera applicazione viene caricata e renderizzata sul lato client. Poi, dopo che il JS codice viene caricata, l'applicazione diventa interattiva.

Generazione statica

In SSG, l'HTML viene generato in fase di compilazione e riutilizzato per ogni richiesta. Dopo la creazione di una build di produzione, ogni richiesta riutilizzerà il file HTML generato staticamente.

Esistono anche due tipi di generazione statica: con e senza dati.

Nel primo caso, l'HTML sarà generato dopo aver recuperato i dati risolvendo la promise. In questo caso, possiamo usare il metodo di recupero dei dati getStaticProps... ma solo se si utilizza Next.js 9.3 o più recente. In caso contrario, si deve pensare di aggiornarlo, perché il vecchio metodo getInitialProps non è più consigliato e sarà deprecato. Questo metodo viene inoltre richiamato in ogni navigazione lato client, quindi non è efficiente se non si vuole recuperare i dati a ogni richiesta.

esportare la funzione async getStaticProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: { posts },
  };
} 

La cosa davvero interessante è una funzione appena rilasciata chiamata ISR (Incremental Static Regeneration), che è una via di mezzo tra SSG e SSR. Consente (utilizzando una chiave specifica chiamata revalidate) di rigenerare la pagina in modo incrementale. Ciò significa che con questa chiave non è necessario ricostruire l'applicazione ogni volta che si vuole ottenere un aggiornamento dei dati prelevati dal server. Basta aggiungere la chiave revalidate con il periodo di rivalidazione in secondi.

esportare la funzione async getStaticProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      post,
    },
    revalidate: 30,
  };
}

Significa che se le richieste arrivano dopo questo periodo, i dati verranno recuperati di nuovo dal server.

Un'altra situazione è quella in cui si utilizza una pagina dinamica e il percorso dipende da alcuni dati esterni. In questo caso, si può usare il metodo getStaticPaths, che indica quali percorsi dinamici devono essere precaricati:

export async const getStaticProps = ({ params }) => {
  const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
  const post = await res.json();
  return {
    props: { post },
  };
}
esportare la funzione async getStaticPaths() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  const paths = posts.map(({ id }) => ({ params: { id: `${id}` } }));
  restituire {
    percorsi,
    fallback: false,
  };
}

C'è un bel modo per verificare quali rotte dinamiche sono state create. È possibile eseguire la prossima compilazione e la prossima esportazione, dopodiché si avrà una versione statica dell'applicazione nella nuova cartella out.

Limitiamo ora i percorsi di pre-costruzione:

esportare la funzione async getStaticPaths() {
  return {
    paths: [{ params: { id: "1" } }, { params: { id: "2" } }],
    fallback: false,
  };
}

Dopo aver eseguito l'esportazione successiva, possiamo notare in entrambi i casi (con e senza un numero limitato di percorsi) un numero diverso di post trovati in my-appoutposts.

prossima_esportazione

Diamo ora un'occhiata più da vicino al parametro di fallback, cruciale e necessario. Dice cosa fare se la pagina non è stata prerenderizzata al momento della creazione. Se è impostato a true, getStaticProps viene eseguito e genera la pagina. Se è false, si otterrà 404 dopo aver tentato di caricare quel percorso specifico. Un'altra cosa: le pagine con fallback abilitate in getStaticPaths non possono essere esportate.

Di seguito sono riportati i risultati del tentativo di caricare la stessa pagina dinamica in entrambi i casi:

Primo caso (senza percorsi limitati)

prima

Secondo caso (con percorsi limitati e fallback impostato su false)

secondo<em>fallback</em>false

Secondo caso (con percorsi limitati e fallback impostato su true)

secondo<em>fallback</em> vero

Rendering lato server

La differenza principale con SSG è che viene generato nuovo HTML a ogni richiesta. Si usa soprattutto quando si recuperano dati esterni. In questo caso, non è necessario ricostruire l'applicazione ogni volta che si desidera aggiornare i dati dal server.

esportare la funzione async getServerSideProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      post,
    },
  };
}

Il metodo getServerSideProps è molto simile a getStaticProps. La differenza è che getServerSideProps viene eseguito a ogni richiesta, mentre getStaticProps viene eseguito una volta in fase di compilazione.

Rendering lato client

Con il rendering lato client, il caricamento iniziale della pagina è un po' lento. La comunicazione con il server avviene in fase di esecuzione. È possibile farlo in modo più tradizionale:

const Blog = () => {


 const [posts, setPosts] = useState([]);
  useEffect(() => {
    const fetchData = async () => {
      const res = await fetch(
     "https://jsonplaceholder.typicode.com/posts");
      const posts = await res.json();
      setPosts(posts);
    };
    fetchData();
  }, []);

Inoltre, possiamo usare un'altra soluzione, 'swr' - libreria React Hooks per il recupero dei dati da Vercel*, fortemente raccomandata dai creatori di NextJS. SWR sta per State While Revalidate.

* Fonte dei dati: SWR di Vercel

importare useSWR da "swr";


const Blog = () =&gt; {
 const fetcher = (url) =&gt; fetch(url).then((r) =&gt; r.json());
 const { data: posts = [], error } = useSWR(
    "https://jsonplaceholder.typicode.com/posts", fetcher);
 if (errore) return <div>Impossibile caricare i messaggi</div>;
 if (!posts.length) return <div>caricamento...</div>;
 ritorno (
    <>
      {posts.map((post) =&gt; (
            {post.title}
        ))}
    </>
}

Sintesi

NextJS ci offre l'ulteriore possibilità di scegliere quale strategia di recupero dei dati vogliamo utilizzare per ogni pagina. Non è necessario seguire un'unica soluzione per l'intera applicazione.

Scorciatoia

  • getServerSideProps: quando è necessario pre-renderizzare l'applicazione a ogni richiesta con i dati recuperati.
  • getStaticProps - quando i dati possono essere recuperati una volta al momento della compilazione e utilizzati per ogni richiesta senza aggiornamenti.
  • getInitialProps - non consigliato, sarà deprecato
  • getStaticPaths - per il pre-rendering dei percorsi dinamici
NextJs pro e contro
Consulenza per lo sviluppo di prodotti digitali

Per saperne di più:

API Rails e CORS. Un pizzico di consapevolezza

Perché si dovrebbe (probabilmente) usare Typescript?

La massima qualità del codice nel vostro progetto SaaS. Perché dovrebbe interessarvi come fondatore (non tecnico)?

Articoli correlati

Sviluppo di software

Costruire applicazioni web a prova di futuro: le intuizioni del team di esperti di The Codest

Scoprite come The Codest eccelle nella creazione di applicazioni web scalabili e interattive con tecnologie all'avanguardia, offrendo esperienze utente senza soluzione di continuità su tutte le piattaforme. Scoprite come la nostra esperienza favorisce la trasformazione digitale e il business...

IL CANCRO
Sviluppo di software

Le 10 principali aziende di sviluppo software con sede in Lettonia

Scoprite le migliori aziende di sviluppo software della Lettonia e le loro soluzioni innovative nel nostro ultimo articolo. Scoprite come questi leader tecnologici possono aiutarvi a migliorare la vostra attività.

thecodest
Soluzioni per aziende e scaleup

Essenziali di sviluppo software Java: Guida all'outsourcing di successo

Esplorate questa guida essenziale sullo sviluppo di software Java con successo outsourcing per migliorare l'efficienza, accedere alle competenze e guidare il successo del progetto con The Codest.

thecodest
Sviluppo di software

La guida definitiva all'outsourcing in Polonia

L'aumento di outsourcing in Polonia è guidato dai progressi economici, educativi e tecnologici, che favoriscono la crescita dell'IT e un clima favorevole alle imprese.

IlCodesto
Soluzioni per aziende e scaleup

Guida completa agli strumenti e alle tecniche di audit IT

Gli audit IT garantiscono sistemi sicuri, efficienti e conformi. Per saperne di più sulla loro importanza, leggete l'articolo completo.

The Codest
Jakub Jakubowicz CTO e cofondatore

Iscrivetevi alla nostra knowledge base e rimanete aggiornati sulle competenze del settore IT.

    Chi siamo

    The Codest - Società internazionale di sviluppo software con centri tecnologici in Polonia.

    Regno Unito - Sede centrale

    • Ufficio 303B, 182-184 High Street North E6 2JA
      Londra, Inghilterra

    Polonia - Poli tecnologici locali

    • Parco uffici Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Ambasciata del cervello, Konstruktorska
      11, 02-673 Varsavia, Polonia

      The Codest

    • Casa
    • Chi siamo
    • Servizi
    • Case Studies
    • Sapere come
    • Carriera
    • Dizionario

      Servizi

    • Consulenza
    • Sviluppo di software
    • Sviluppo backend
    • Sviluppo Frontend
    • Staff Augmentation
    • Sviluppatori backend
    • Ingegneri del cloud
    • Ingegneri dei dati
    • Altro
    • Ingegneri QA

      Risorse

    • Fatti e miti sulla collaborazione con un partner esterno per lo sviluppo di software
    • Dagli Stati Uniti all'Europa: Perché le startup americane decidono di trasferirsi in Europa
    • Confronto tra gli hub di sviluppo Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filippine), Eurasia (Turchia)
    • Quali sono le principali sfide di CTO e CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condizioni di utilizzo del sito web

    Copyright © 2025 di The Codest. Tutti i diritti riservati.

    it_ITItalian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek it_ITItalian