[PT-BR] Iniciando em Next.js
Tags: react, javascript, webdev, braziliandevs
Published: 2021-08-27 13:29:04


Muito se fala do framework Next.js quando o assunto e React.js, caso não conheça, te darei uma introdução do quão fantástico e este framework e seus benefícios para desenvolvimento frontend web.
## O que é Next.js?

É um framework web desenvolvido pela [Vercel](https://vercel.com/) para desenvolvimento frontend React que permite funcionalidades como renderização do lado do servidor e geração de site estático.

## Renderização do lado do servidor?

Em um aplicativo React tradicional, todo o aplicativo é carregado e renderizado no cliente. Next.js permite que o carregamento da primeira página seja processado pelo servidor, o que é ótimo para SEO e desempenho, por exemplo se desabilitarmos o Javascript do browser, nada será exibido em uma aplicação com React puro, porem com Next.js você percebera que mesmo desabilitado será renderizado todo App.

## Outros benefícios do Next.js

* Roteamento de página fácil

* Rotas Api do servidor

* Geração de site estático

* Fácil implantação

## Crie o primeiro projeto Next.js.

Para criar um projeto Next.js, você pode usar o prático comando:

    npx create-next-app my-app-next

Next.js existem também, templates prontos assim como há no **create-react-app**, por exemplo este template com Typescript:

    npx create-next-app --example with-typescript with-typescript-app

Para mais templates, acesse o próprio repositório da [Vercel](https://vercel.com/) no [Github](https://github.com/vercel/next.js/tree/canary/examples).

## Iniciando a Aplicação

Criado a estrutura com primeiro comando citado acima, abra o seu terminal e navegue ate a pasta do projeto gerado. Para iniciar o projeto como desenvolvimento, use o script **dev.**

    npm run dev

Acessando seu [Localhost](http://localhost:3000/) na porta 3000, vera sua aplicação em execução.

## Entendendo a estrutura de arquivos do Next

Abrindo a pasta do projeto em seu editor de código ou IDE da sua escolha, em meu caso estarei utilizando o [Visual Studio Code da microsoft](https://code.visualstudio.com/), teremos a seguinte estrutura de pastas:

![](https://cdn-images-1.medium.com/max/2000/1*V3NIozWU5pZk_AC1HSv9Bg.png)

Nesta estrutura temos 3 pastas **pages **| **public **| **styles**, sendo “pages” e “public” pastas especiais para o Next, deixe-me explicar melhor como estas duas pastas funcionam.

## Roteamento

Com Next não precisamos de uma biblioteca de roteamento, pois cada arquivo dentro da pasta **pages **será tratado como uma pagina.

Vamos brincar com o roteamento do Next criando um novo arquivo chamado **home.js** e criando um simples componente como código abaixo:

![](https://cdn-images-1.medium.com/max/2068/1*F073RB7nS5VE6IIij2r_iw.png)

Ao acessar nosso [Localhost:3000/home](http://localhost:3000/home) será exibido nosso componente recém criado.

E se quiséssemos rotas como [Localhost:3000/profile/home](http://localhost:3000/profile/home) ? para isto, podemos criar subpastas dentro da pasta **pages**, como no exemplo acima, bastaria criar uma pasta **profile **e mover nosso arquivo **home.js **para **profile** e acessarmos novamente.

![](https://cdn-images-1.medium.com/max/2000/1*SbsCikcMdJ10qMF3Q6AyKw.png)

## Rotas dinâmicas

Imagine que você tem um blog, e cada postagem possui um arquivo JS, falando de 1 ou 2 ou ate mesmo 3 postagens não seria grande um grande problema, mas, caso esse mesmo blog já tivesse anos de vida com muitas postagens, seria trabalhoso ter tantos arquivos não acha?. Trabalhando Next podemos usar as rotas dinâmicas.

Vamos criar uma pasta **posts **dentro da **pages **e dentro da mesma criarmos um arquivo chamado [slug].js, sim um arquivo com colchetes em seu nome, o nome “slug” entre colchetes não necessariamente precisa ser este, poderia escolher outro, mas, será usado este para este exemplo.

![](https://cdn-images-1.medium.com/max/2000/1*c9y_LJMJwh_Cfn5iv6yZbg.png)

Next nos proporciona o Hook **useRouter **que através dele podemos acessar as **query params** da nossa rota, veja um exemplo abaixo do uso desse Hook.

![](https://cdn-images-1.medium.com/max/2028/1*wbhY4xqp_esqmwmKcx5zQQ.png)

Se acessarmos agora por exemplo [localhost:3000/posts/20](http://localhost:3000/posts/20) , será exibido nosso H1 com conteúdo “Post - 20”.

## **Navegação entre rotas**

Entendendo agora com funciona o roteamento provido pelo Next, para navegar entre nossas paginas não devemos usar a Tag <a></a> e sim um componente Link fornecido pelo próprio Next.
Dentro da rota Profile altere a pagina Home, veja como farei a seguir.

![](https://cdn-images-1.medium.com/max/2000/1*HDDxc5MpxhjoMg6bI7dxUQ.png)

Acessando [localhost:3000/profile/home](http://localhost:3000/profile/home) terá um titulo “Hello Next” e logo abaixo nosso link “Go Post 25”. Ao clicar seremos redirecionado para nossa rota Post obtendo Post 25 pois a mesma e uma rota dinâmica. Caso tenha reparado, ao clicar a pagina muda mas não a um carregamento completo pelo navegador.

Ah outra maneira para forçarmos um redirecionamento, usando o Hook useRouter, veja:

![](https://cdn-images-1.medium.com/max/2000/1*Icy3FW29is5QR7LPHp5X3g.png)

Adicionando essa condicional onde apenas podemos ver Posts acima do 10, caso seja inferior seremos redirecionados a pagina inicial (**index.js**) do Next.

## Componente Head

Assim como componente Link, Next fornece a tag de cabeçalho como título ou meta, você precisa usar o componente Head. Vamos adiciona-lo a nossa pagina Home.

![](https://cdn-images-1.medium.com/max/2000/1*ktOtTcl_pUn7XFtHCG9wLA.png)

Agora nossa pagina Home possui um titulo próprio.

## Imagens e Otimização de Imagens

Por padrão, Next consegue servir todos os arquivos contidos na pasta Public, como Imagens, Svgs etc…
Next também nos fornece um componente para otimização automática para imagens, As imagens são carregadas lentamente por padrão sem comprometer a velocidade da pagina. Vamos aplicar este componente a nossa pagina Home.

![](https://cdn-images-1.medium.com/max/2000/1*t9gv_FI3kBqaWoYuJfYDJw.png)

Neste exemplo usei esta [imagem](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Nextjs-logo.svg/1280px-Nextjs-logo.svg.png) retirada da Wikipedia, apenas basta baixá-la, mover para pasta Public do Next e nomeá-la como NextImage.png.

## Pagina 404

Next possui uma pagina para respostas 404 - not found, para checarmos basta tentarmos acessar uma rota que não existe como por exemplo: [http://localhost:3000/random](http://localhost:3000/random)

![](https://cdn-images-1.medium.com/max/2000/1*4wiPAoBm-unHX3pSll1oxA.png)

Podemos personalizá-la conforme desejar, basta criarmos dentro da **pages **um arquivo 404.js contendo um simples componente em React.

![](https://cdn-images-1.medium.com/max/2000/1*5XAh1Bmd5DUYj2ilzSct0g.png)

![](https://cdn-images-1.medium.com/max/2000/1*SnXc3UzijyyxrAXyYiOpGA.png)

## Server Side Rendering

Bom antes de falarmos de Renderização do lado do servidor, vamos entender como uma aplicação com React que consome uma API funciona.
Quando temos um App feito em React, ao ser acessado nossa pagina ira carregar e logo apos sera feita a consulta em uma API, pro nosso SEO isso não e algo bom, pois os motores de busca não esperam uma busca por API. para isso usamos Server Side Rendering provido do Next.js.

Vamos Implementar em nossa pagina Home e veja como e simples.
Para falarmos para Next que esta pagina precisa de renderização do lado do servidor, basta adicionarmos um método assíncrono chamado **getServerSideProps** a este retornara um objeto contendo a propriedade Props que e o Props que nosso componente ira receber em sua construção.
Usarei uma Fake Rest Api, caso queira consultar o site [**jsonplaceholder](https://jsonplaceholder.typicode.com/).**

![](https://cdn-images-1.medium.com/max/2000/1*LBUz2j8q1nAaF0L7tZDdiA.png)

## **Adicionando Typescript**

Adicionar Typescript em projetos Next, não e algo complexo, basta adicionarmos as seguintes dependências:

    npm install typescript @types/react @types/node -D

Por fim, altere as extensões das paginas .js e .jsx para .ts e .tsx, inicie o projeto em desenvolvimento, será gerado automaticamente o arquivo tsconfig.json e seu projeto já esta funcionando com todos benefícios do Typescript.

## Fim

Obrigado por ter chego ate aqui, espero que este conteúdo tenha te agregado algum conhecimento. Caso queira ver código por completo acesse meu [Github](https://github.com/mfortunat0/medium-posts/tree/master/starting-at-nextjs)