(function(w,d,s,l,i){w[l]=w[l]|||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=? 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Datu iegūšanas stratēģijas NextJS - The Codest
The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2020-09-10
Programmatūras izstrāde

Datu iegūšanas stratēģijas NextJS

The Codest

Pawel Rybczynski

Software Engineer

Pēdējā laikā NextJS kļūst arvien populārāks kā veids, kā veidot React lietojumprogrammas. Noteikti lielu ieguldījumu tajā ir devis fakts, ka NextJS piedāvā vairākas dažādas datu iegūšanas stratēģijas.

Tie ir:

  • Klienta puses atveidošana: CSR,
  • Servera puses atveidošana: SSR,
  • Statiska vietnes atveidošana: SSG,
  • Inkrementālā statiskā reģenerācija: ISR.

NextJS, atšķirībā no vienkāršā React lietotnē ir pieejama funkcija, ko dēvē par iepriekšēju attēlošanu. Tas nozīmē, ka sākotnējās ielādes laikā tiek parādīts iepriekš renderēts HTML. Tradicionālajās React lietojumprogrammās visa lietotne tiek ielādēta un atveidota klienta pusē. Pēc tam, kad JS kods ir ielādēta, lietojumprogramma kļūst interaktīva.

Statiskā ģenerēšana

SSG HTML tiek ģenerēts izveides laikā un atkārtoti izmantots katram pieprasījumam. Pēc produkcijas izveides katrs pieprasījums atkārtoti izmantos šo statiski ģenerēto HTML failu.

Pastāv arī divu veidu statiskā ģenerēšana: ar un bez dati.

Pirmajā gadījumā HTML tiks ģenerēts pēc datu iegūšanas, atrisinot solījumu. Šajā gadījumā mēs varam izmantot getStaticProps datu iegūšanas metodi... bet tikai tad, ja izmantojat Next.js 9.3 vai jaunāku. Ja nē, padomājiet par tās atjaunināšanu, jo vecākā metode getInitialProps vairs nav ieteicama un tiks novecojusi. Šī metode arī tiek izsaukta katrā klienta puses navigācijā, tāpēc tā nav efektīva, ja nevēlaties iegūt datus katrā pieprasījumā.

eksportēt async funkciju getStaticProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: { posts },
  };
} 

Ļoti forša ir nesen izlaistā funkcija ISR (Incremental Static Regeneration), kas ir kaut kas starp SSG un SSR. Tā ļauj (izmantojot īpašu atslēgu revalidate) veikt lapas pakāpenisku atjaunošanu. Tas nozīmē, ka, izmantojot šo atslēgu, jums nav jāpārveido lietotne katru reizi, kad vēlaties saņemt no servera iegūto datu atjauninājumu. Vienkārši pievienojiet atslēgu revalidate, norādot atjaunošanas periodu sekundēs.

eksportēt async funkciju getStaticProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      posts,
    },
    revalidate: 30,
  };
}

Tas nozīmē, ka, ja pieprasījumi tiks saņemti pēc šī perioda, serveris atkal ielādēs datus no servera.

Cita situācija ir tad, ja izmantojat dinamisku lapu un ceļš ir atkarīgs no kādiem ārējiem datiem. Tādā gadījumā varam izmantot metodi getStaticPaths, kas norāda, kuri dinamiskie ceļi ir iepriekš ielādējami:

eksportēt async const getStaticProps = ({ params }) => {
  const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
  const post = await res.json();
  return {
    props: { post },
  };
}
eksportēt async funkciju getStaticPaths() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  const paths = posts.map(({ id }) => ({ params: { id: `${id}` } } }));
  return {
    paths,
    fallback: false,
  };
}

Ir iespējams ērti pārbaudīt, kuri dinamiskie maršruti ir izveidoti. Varat palaist nākamo izveidi un nākamo eksportēšanu, un pēc tam jums būs pieejama statiskā lietotnes versija jaunizveidotajā out direktorijā.

Tagad ierobežosim iepriekš izveidotos ceļus:

eksportēt async funkciju getStaticPaths() {
  return {
    paths: [{ { params: { id: "1" } } }, { params: { id: "2" } } }],
    fallback: false,
  };
}

Pēc nākamā eksporta palaišanas abos gadījumos (ar un bez ierobežota ceļu skaita) mēs varam pamanīt atšķirīgu amatu skaitu, kas atrodami my-appoutposts.

next_export

Tagad aplūkosim svarīgo un nepieciešamo rezerves parametru. Tas norāda, ko darīt, ja lapas izveides laikā tā nav iepriekš atveidota. Ja tas ir iestatīts uz true, tiek palaists getStaticProps un tiek ģenerēta šī lapa. Ja false, pēc mēģinājuma ielādēt šo konkrēto ceļu mēs saņemsim 404. Vēl viena lieta: lapas ar dublējošo iestatījumu, kas ieslēgts getStaticPaths, nevar eksportēt.

Zemāk redzēsiet rezultātus, mēģinot ielādēt vienu un to pašu dinamisko lapu abos gadījumos:

Pirmais gadījums (bez ierobežotiem ceļiem)

pirmais

Otrais gadījums (ar ierobežotajiem ceļiem un dublēšanas iestatījumu uz false)

otrais<em>atgriezeniskais signāls</em>false

Otrais gadījums (ar ierobežotiem ceļiem un dublēšanas iestatījumu true)

otrais<em>atgriezenisks</em>true

Servera puses renderēšana

Galvenā atšķirība no SSG: katrā pieprasījumā tiek ģenerēts jauns HTML. Tas tiek izmantots galvenokārt tad, kad mēs saņemam ārējus datus. Šajā gadījumā nav nepieciešams pārbūvēt lietotni katru reizi, kad vēlamies atjaunināt datus no servera.

eksportēt async funkciju getServerSideProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      posts,
    },
  };
}

Metode getServerSideProps ir ļoti līdzīga metodei getStaticProps. Atšķirība ir tāda, ka getServerSideProps tiek izpildīts katrā pieprasījumā, bet getStaticProps tiek izpildīts vienreiz izveides laikā.

Klienta puses renderēšana

Izmantojot klienta puses atveidošanu, sākotnējā lapas ielāde ir nedaudz lēna. Saziņa ar serveri notiek izpildes laikā. To var izdarīt tradicionālākajā veidā:

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();
  }, []);

Varam izmantot arī citu risinājumu, ‘swr’ - React Hooks bibliotēku Vercel* datu iegūšanai, ko stingri iesaka NextJS veidotāji. SWR nozīmē State While Revalidate.

* Datu avots: SWR pēc Vercel

importēt useSWR no "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 (kļūda) return <div>Neizdevās ielādēt ziņojumus</div>;
 if (!posts.length) return <div>iekraušana...</div>;
 atgriezties (
    <>
      {posts.map((post) =&gt; (
            {post.title}
        ))}
    </>
}

Kopsavilkums

NextJS sniedz mums papildu iespēja izvēlēties, kuru no datu iegūšanas stratēģijām vēlamies izmantot katrā lapā. Mums nav jāievēro tikai viens risinājums visai lietojumprogrammai.

Īsais ceļvedis

  • getServerSideProps - ja jums ir nepieciešams, lai katrā pieprasījumā iepriekš izkrāsotu lietotni ar iegūtajiem datiem.
  • getStaticProps - ja datus var iegūt vienreiz izveides laikā un izmantot katrā pieprasījumā bez atjaunināšanas.
  • getInitialProps - nav ieteicams, būs novecojusi
  • getStaticPaths - dinamisko celiņu pirmspoguļveidošanai.
NextJs plusi un mīnusi
Konsultācijas par digitālo produktu izstrādi

Lasīt vairāk:

Rails API un CORS. Apziņas piesitiens

Kāpēc jums (iespējams) vajadzētu izmantot Typescript?

Visaugstākās kvalitātes kods jūsu SaaS projektā. Kāpēc jums kā (netehniskajam) dibinātājam par to būtu jārūpējas?

Saistītie raksti

Ilustrācija viedtālruņa veselības aprūpes lietotnei ar sirds ikonu un pieaugošo veselības diagrammu, kas apzīmēta ar The Codest logotipu, kurš pārstāv digitālās veselības un HealthTech risinājumus.
Programmatūras izstrāde

Veselības aprūpes programmatūra: Mārketinga programmatūra: veidi, izmantošanas gadījumi

Šodien veselības aprūpes organizāciju rīcībā esošie rīki vairs neatgādina papīra diagrammas, kas tika izmantotas pirms vairākiem gadu desmitiem. veselības aprūpes programmatūra tagad atbalsta veselības aprūpes sistēmas, pacientu aprūpi un mūsdienīgu veselības aprūpes sniegšanu klīniskajās un...

TĀKĀDĒJAIS
Abstrakta ilustrācija ar lejupejošu joslu diagrammu ar augošu bultiņu un zelta monētu, kas simbolizē izmaksu efektivitāti vai ietaupījumus. Augšējā kreisajā stūrī redzams The Codest logotips ar saukli "In Code We Trust" uz gaiši pelēka fona.
Programmatūras izstrāde

Kā paplašināt izstrādātāju komandu, nezaudējot produkta kvalitāti

Palielināt izstrādātāju komandu? Uzziniet, kā augt, nezaudējot produkta kvalitāti. Šajā rokasgrāmatā aplūkotas pazīmes, kas liecina, ka ir pienācis laiks paplašināt komandu, komandas struktūra, pieņemšana darbā, vadība un rīki, kā arī tas, kā The Codest var...

TĀKĀDĒJAIS
Programmatūras izstrāde

Uz nākotni noturīgu tīmekļa lietojumprogrammu veidošana: The Codest ekspertu komandas ieskats

Uzziniet, kā The Codest izceļas mērogojamu, interaktīvu tīmekļa lietojumprogrammu izveidē, izmantojot modernākās tehnoloģijas un nodrošinot viengabalainu lietotāja pieredzi visās platformās. Uzziniet, kā mūsu zināšanas veicina digitālo transformāciju un biznesa...

TĀKĀDĒJAIS
Programmatūras izstrāde

Top 10 Latvijā bāzēti programmatūras izstrādes uzņēmumi

Mūsu jaunākajā rakstā uzziniet vairāk par Latvijas labākajiem programmatūras izstrādes uzņēmumiem un to inovatīvajiem risinājumiem. Uzziniet, kā šie tehnoloģiju līderi var palīdzēt uzlabot jūsu biznesu.

thecodest
Uzņēmumu un mērogošanas risinājumi

Java programmatūras izstrādes pamati: A Guide to Outsourcing Successfully

Izpētiet šo būtisko rokasgrāmatu par veiksmīgu outsourcing Java programmatūras izstrādi, lai uzlabotu efektivitāti, piekļūtu speciālajām zināšanām un sekmīgi īstenotu projektus ar The Codest.

thecodest

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

    The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

    Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

    Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

    lvLatvian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lt_LTLithuanian is_ISIcelandic lvLatvian