Next.js - Pré-renderização

Em Next.js, sabemos que ele gera HTML para uma página chamada pré-renderização. Next.JS suporta dois tipos de pré-renderização.

  • Static Generation- Este método gera a página HTML no momento da construção. Este HTML pré-renderizado é enviado em cada solicitação. Este método é útil para sites de marketing, blogs, sites de listagem de produtos de comércio eletrônico, ajuda, sites de documentação.

  • Server Side Generation- Este método gera a página HTML em cada solicitação. Este método é adequado quando o conteúdo de uma página html pode variar com cada solicitação.

Pré-renderização por página

Next.JS permite definir o método de pré-renderização para cada página onde a maioria das páginas segue a geração estática e outras páginas usarão a renderização do lado do servidor.

Geração estática sem dados

A geração estática pode ser feita sem dados. Nesse caso, as páginas HTML estarão prontas sem a necessidade de pré-buscar os dados e, em seguida, iniciar a renderização. Os dados podem ser obtidos posteriormente ou mediante solicitação. Essa técnica ajuda a mostrar ao usuário uma interface de usuário sem quaisquer dados, caso os dados demorem para chegar.

Geração estática com dados

A geração estática pode ser feita com dados. Nesse caso, as páginas HTML não estarão prontas até que os dados sejam buscados, pois o HTML pode depender dos dados. Cada componente tem um método especialgetStaticProps que pode ser usado para buscar dados e passar dados como adereços da página para que a página possa renderizar de acordo com os adereços passados.

A função getStaticProps () é executada no momento da construção na produção e é executada para cada solicitação no modo de desenvolvimento.

Vamos criar um exemplo para demonstrar o mesmo.

Neste exemplo, criaremos uma página de atualização index.js e first.js para fazer um acerto no servidor para obter dados.

Vamos atualizar o projeto nextjs usado no capítulo Suporte Global de CSS .

Atualize o arquivo index.js no diretório de páginas para usar o método getServerSideProps (). Este método será chamado por solicitação.

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

Atualize o arquivo first.js no diretório de páginas para usar o método getStaticProps (). Este método será chamado uma vez.

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 }
   }
}

Inicie o servidor Next.js

Execute o seguinte comando para iniciar o servidor -.

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

Verificar saída

Abra localhost: 3000 em um navegador e você verá a seguinte saída.

Clique no link da primeira postagem.