window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() Strategier för att hämta data i NextJS - The Codest
Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2021-04-09
Utveckling av programvara

Strategier för datahämtning i NextJS

Codest

Pawel Rybczynski

Software Engineer

På senare tid har NextJS blivit mer och mer populärt som ett sätt att bygga React-applikationer. En stor bidragande orsak är säkert det faktum att NextJS erbjuder flera olika strategier för att hämta data.

Och dessa är..:

  • Rendering på klientsidan: CSR,
  • Rendering på serversidan: SSR,
  • Rendering av statisk webbplats: SSG,
  • Inkrementell statisk regenerering: ISR.

NextJS, till skillnad från den vanliga React-appen, erbjuder en funktion som kallas pre-rendering. Detta innebär att förrenderad HTML visas under den första laddningen. I traditionella React-applikationer laddas och renderas hela appen på klientens sida. Sedan, efter att JS kod laddas blir applikationen interaktiv.

Statisk generering

I SSG genereras HTML-filen under byggtiden och återanvänds för varje begäran. När en produktionsbyggnad har skapats kommer varje begäran att återanvända den statiskt genererade HTML-filen.

Det finns också två typer av statisk generering: med och utan data.

I det första fallet kommer HTML att genereras efter att data har hämtats genom att löftet har lösts. I det här fallet kan vi använda datahämtningsmetoden getStaticProps ... men bara om du använder Next.js 9.3 eller nyare. Om inte, tänk på att uppgradera den, eftersom den äldre getInitialProps-metoden inte längre rekommenderas och kommer att avskrivas. Den här metoden anropas också i varje navigering på klientsidan, så den är inte effektiv om du inte vill hämta data vid varje begäran.

export async funktion getStaticProps() {
  const res = vänta på hämtning("https://jsonplaceholder.typicode.com/posts");
  const inlägg = await res.json();
  returnerar {
    rekvisita: { inlägg },
  };
} 

Det riktigt häftiga är en nyligen släppt funktion som heter ISR (Incremental Static Regeneration), som är något mellan SSG och SSR. Det gör att du (genom att använda en specifik nyckel som heter revalidate) kan göra sidan stegvis regenererad. Det innebär att du med den här nyckeln inte behöver bygga om appen varje gång du vill få en uppdatering av de data som hämtas från servern. Lägg bara till revalidate-nyckeln med revalideringsperioden i sekunder.

export async funktion getStaticProps() {
  const res = vänta på hämtning("https://jsonplaceholder.typicode.com/posts");
  const inlägg = await res.json();
  return {
    rekvisita: {
      inlägg,
    },
    revalidate: 30,
  };
}

Det innebär att om förfrågningar kommer efter denna period kommer data att hämtas från servern igen.

En annan situation är när du använder en dynamisk sida och sökvägen beror på vissa externa data. I det fallet kan vi använda metoden getStaticPaths för att tala om vilka dynamiska sökvägar som ska laddas i förväg:

export async const getStaticProps = ({params }) => {
  const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
  const post = await res.json();
  return {
    rekvisita: { post },
  };
}
export asynkron funktion getStaticPaths() {
  const res = vänta på hämtning("https://jsonplaceholder.typicode.com/posts");
  const posts = avvakta res.json();
  const paths = posts.map(({ id }) => ({ params: { id: `${id}` } }));
  return {
    sökvägar,
    fallback: false,
  };
}

Det finns ett bra sätt att kontrollera vilka dynamiska vägar som har skapats. Du kan köra nästa build och nästa export och efter det kommer du att ha en statisk version av din app i den nyskapade out-katalogen.

Låt oss nu begränsa förbyggnadsvägarna:

export asynkron funktion getStaticPaths() {
  return {
    sökvägar: [{ params: { id: "1" } }, { params: { id: "2" } }],
    fallback: false,
  };
}

Efter att ha kört nästa export kan vi i båda fallen (med och utan ett begränsat antal sökvägar) notera ett olika antal inlägg som finns i my-appoutposts.

nästa_export

Låt oss nu ta en närmare titt på den viktiga och obligatoriska fallback-parametern. Den anger vad som ska göras om sidan inte förrenderades vid byggtiden. Om den är inställd på true körs getStaticProps och genererar den sidan. Om den är falsk får vi 404 efter att ha försökt ladda den specifika sökvägen. En annan sak: sidor med fallback som är aktiverade i getStaticPaths kan inte exporteras.

Nedan ser du resultatet av att försöka ladda samma dynamiska sida i båda fallen:

Första fallet (utan begränsade banor)

först

Andra fallet (med begränsade sökvägar och fallback inställd på false)

andra<em>fallback</em>false

Andra fallet (med begränsade sökvägar och fallback inställd på true)

andra<em>fallback</em>troligt

Rendering på serversidan

Den största skillnaden med SSG är att ny HTML genereras vid varje förfrågan. Det används mest när vi hämtar externa data. I det här fallet finns det inget behov av att bygga om appen varje gång vi vill uppdatera data från servern.

export asynkron funktion getServerSideProps() {
  const res = vänta på hämtning("https://jsonplaceholder.typicode.com/posts");
  const inlägg = await res.json();
  return {
    rekvisita: {
      inlägg,
    },
  };
}

Metoden getServerSideProps ser mycket lik ut som getStaticProps. Skillnaden är att getServerSideProps körs vid varje förfrågan, medan getStaticProps körs en gång under build-tiden.

Rendering på klientsidan

Med rendering på klientsidan är den första laddningen av sidan lite långsam. Kommunikationen med servern sker under körtiden. Du kan göra det på ett mer traditionellt sätt:

const Blog = () => {


 const [posts, setPosts] = useState([]);
  useEffect(() => {
    const fetchData = async () => {
      const res = vänta på hämtning(
     "https://jsonplaceholder.typicode.com/posts");
      const posts = await res.json();
      setPosts(inlägg);
    };
    fetchData();
  }, []);

Vi kan också använda en annan lösning, "swr" - React Hooks-bibliotek för datahämtning av Vercel *, som starkt rekommenderas av NextJS-skaparna. SWR står för State While Revalidate.

* Datakälla: SWR av Vercel

importera useSWR från "swr";


const Blog = () =&gt; {
 const fetcher = (url) =&gt; fetch(url).then((r) =&gt; r.json());
 const { data: inlägg = [], fel } = useSWR(
    "https://jsonplaceholder.typicode.com/posts", fetcher);
 if (fel) return <div>Misslyckades med att ladda inlägg</div>;
 if (!inlägg.längd) retur <div>lastning...</div>;
 returnera (
    <>
      {posts.map((post) =&gt; (
            {post.titel}
        ))}
    </>
}

Sammanfattning

NextJS ger oss ytterligare en möjlighet att välja vilken av datahämtningsstrategierna vi vill använda på varje sida. Vi behöver inte bara följa en lösning för hela applikationen.

Genväg

  • getServerSideProps - när du behöver förrendera appen vid varje begäran med hämtade data
  • getStaticProps - när data kan hämtas en gång vid byggtiden och användas vid varje förfrågan utan uppdatering
  • getInitialProps - rekommenderas inte, kommer att avskrivas
  • getStaticPaths - för förrendering av dynamiska sökvägar
NästaJs för- och nackdelar
Konsultation inom digital produktutveckling

Läs mer om detta:

Rails API & CORS. Ett stänk av medvetenhet

Varför bör du (förmodligen) använda Typescript?

Kod av högsta kvalitet i ditt SaaS-projekt. Varför ska du bry dig om det som en (icke-teknisk) grundare?

Relaterade artiklar

Utveckling av programvara

Bygg framtidssäkrade webbappar: Insikter från The Codest:s expertteam

Upptäck hur The Codest utmärker sig genom att skapa skalbara, interaktiva webbapplikationer med banbrytande teknik som ger sömlösa användarupplevelser på alla plattformar. Läs om hur vår expertis driver digital omvandling och affärsutveckling...

DEKODEST
Utveckling av programvara

Topp 10 Lettlandsbaserade mjukvaruutvecklingsföretag

Läs mer om Lettlands främsta mjukvaruutvecklingsföretag och deras innovativa lösningar i vår senaste artikel. Upptäck hur dessa teknikledare kan hjälpa till att lyfta ditt företag.

thecodest
Lösningar för företag och uppskalningsföretag

Java Software Development Essentials: En guide till framgångsrik outsourcing

Utforska denna viktiga guide om framgångsrik outsourcing av Java-programvaruutveckling för att förbättra effektiviteten, få tillgång till expertis och driva projektframgång med The Codest.

thecodest
Utveckling av programvara

Den ultimata guiden till outsourcing i Polen

Den kraftiga ökningen av outsourcing i Polen drivs av ekonomiska, utbildningsmässiga och tekniska framsteg, vilket främjar IT-tillväxt och ett företagsvänligt klimat.

TheCodest
Lösningar för företag och uppskalningsföretag

Den kompletta guiden till verktyg och tekniker för IT-revision

IT-revisioner säkerställer säkra, effektiva och kompatibla system. Läs mer om hur viktiga de är genom att läsa hela artikeln.

Codest
Jakub Jakubowicz CTO och medgrundare

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokala tekniknav

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

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