Next.js - wstępne renderowanie

Wiemy, że w Next.js generuje HTML dla strony nazywanej renderowaniem wstępnym. Next.JS obsługuje dwa typy renderowania wstępnego.

  • Static Generation- Ta metoda generuje stronę HTML w czasie kompilacji. Ten wstępnie renderowany kod HTML jest wysyłany przy każdym żądaniu. Ta metoda jest przydatna w przypadku witryn marketingowych, blogów, produktów e-commerce z listą witryn, pomocy, witryn z dokumentacją.

  • Server Side Generation- Ta metoda generuje stronę HTML przy każdym żądaniu. Ta metoda jest odpowiednia, gdy zawartość strony HTML może się różnić w zależności od żądania.

Wstępne renderowanie na stronę

Next.JS pozwala ustawić metodę wstępnego renderowania dla każdej strony, na której większość stron jest generowana statycznie, a inne strony będą korzystać z renderowania po stronie serwera.

Generowanie statyczne bez danych

Generowanie statyczne można przeprowadzić bez danych. W takim przypadku strony HTML będą gotowe bez konieczności wstępnego pobierania danych i rozpoczynania renderowania. Dane można pobrać później lub na żądanie. Technika ta pomaga w wyświetlaniu użytkownikowi interfejsu użytkownika bez żadnych danych, na wypadek gdyby dane wymagały czasu.

Generowanie statyczne z danymi

Generowanie statyczne można przeprowadzić z danymi, w takim przypadku strony HTML nie będą gotowe do momentu pobrania danych, ponieważ HTML może być zależny od danych. Każdy składnik ma specjalną metodęgetStaticProps które mogą być używane do pobierania danych i przekazywania danych jako rekwizytów strony, aby strona mogła renderować zgodnie z przekazanymi właściwościami.

Funkcja getStaticProps () działa w czasie kompilacji w środowisku produkcyjnym i dla każdego żądania w trybie deweloperskim.

Stwórzmy przykład, aby zademonstrować to samo.

W tym przykładzie utworzymy aktualizację strony index.js i first.js, aby serwer mógł pobierać dane.

Zaktualizujmy projekt nextjs używany w rozdziale Globalne wsparcie CSS .

Zaktualizuj plik index.js w katalogu pages, aby użyć metody getServerSideProps (). Ta metoda będzie wywoływana na żądanie.

import Link from 'next/link'
import Head from 'next/head'

function HomePage(props) {
   return (
      <>
         <Head>
            <title>Welcome to Next.js!</title>
         </Head>
         <div>Welcome to Next.js!</div>
         <Link href="/posts/first"><a>First Post</a></Link>
         <br/>
         <div>Next stars: {props.stars}</div>
         <img src="/logo.png" alt="TutorialsPoint Logo" />
      </>	    
   )
}

export async function getServerSideProps(context) {
   const res = await fetch('https://api.github.com/repos/vercel/next.js')
   const json = await res.json()
   return {
      props: { stars: json.stargazers_count }
   }
}

export default HomePage

Zaktualizuj plik first.js w katalogu pages, aby używał metody getStaticProps (). Ta metoda zostanie wywołana raz.

import Link from 'next/link'
import Head from 'next/head'
import Container from '../../components/container'

export default function FirstPost(props) {
   return (
      <>
         <Container>
            <Head>
               <title>My First Post</title>
            </Head>
            <h1>My First Post</h1>
            <h2>
               <Link href="/">
                  <a>Home</a>
               </Link>
               <div>Next stars: {props.stars}</div>
            </h2>
         </Container>
      </>	  
   )
}

export async function getStaticProps() {
   const res = await fetch('https://api.github.com/repos/vercel/next.js')
   const json = await res.json()
   return {
      props: { stars: json.stargazers_count }
   }
}

Uruchom serwer Next.js

Uruchom następujące polecenie, aby uruchomić serwer -.

npm run dev
> [email protected] dev \Node\nextjs
> next

ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait  - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait  - compiling...
event - compiled successfully

Sprawdź wyjście

Otwórz localhost: 3000 w przeglądarce, a zobaczysz następujące dane wyjściowe.

Kliknij link First post.