Hoje eu separei um guia completo na prÃĄtica onde vocÊ vai aprender o que que ÃĐ o nextjs como aplicar na prÃĄtica o que que ele traz de recurso a mais dentro de um projeto react EntÃĢo seja muito bem-vindo a mais um vÃdeo aqui no canal se vocÊ ÃĐ novo por aqui ou se vocÊ nÃĢo conhece o nosso canal se esse vÃdeo te agregar de alguma coisa vocÊ sabe Ãģ se inscreve aqui embaixo que ajuda a gente trazer mais conteÚdo para vocÊs e para VocÊ que jÃĄ ÃĐ inscrito eu nem vou perder meu tempo que eu
sei que vocÊ jÃĄ deixou o seu gostei aqui embaixo EntÃĢo bora lÃĄ primeira coisa que a gente vai fazer entÃĢo eu separei aqui de uma forma mais didÃĄtica que ÃĐ possÃvel pra gente aprender na prÃĄtica vocÊ vindo do react ou vocÊ começando a estudar o Next O que que ÃĐ o Next O que que ele tem na prÃĄtica e como que a gente pode entÃĢo evoluir nossas aplicaçÃĩes com react usando o Next entÃĢo eu separei em alguns CapÃtulos que a gente vai falar e vai ver na prÃĄtica como desde Criar o seu primeiro projeto Como
trabalhar com navegaçÃĢo de pÃĄginas metad server component client component rotas dinÃĒmicas server actions aqui dentro revalidaçÃĢo cach ÃĐ cach dentro da de uma requisiçÃĢo no data fetting aqui e tambÃĐm sobre mws tÃĄ e a gente vai falar atÃĐ um pouquinho tambÃĐm sobre api ou eh api handlers nÃĐ maravilha entÃĢo bora lÃĄ pra gente Começar primeira coisa como vocÊs sabem nÃĐ o react ele ÃĐ apenas uma biblioteca entÃĢo ele ÃĐ uma biblioteca para desenvolvimento de interfaces de usuÃĄrio entÃĢo ele nada mais ÃĐ do que pra gente construir interfaces de usuÃĄrio com componentizaçÃĢo modularizaçÃĢo de forma reativa
jÃĄ o Next o Next ele ÃĐ o quÊ ele ÃĐ ele ÃĐ um Framework tÃĄ e eles falam Framework for the web nÃĐ porque ele ÃĐ basicamente um Framework full stack hoje em dia entÃĢo ele ÃĐ um Framework que Dentro dele utiliza o react ele usa a biblioteca react aà entÃĢo usando todo o poder do react sÃģ que como ele ÃĐ um Framework ele vai trazer alguns recursos a mais entÃĢo algumas coisas e algumas ferramentas como roteamento de pÃĄgina jÃĄ que no react puro quando a gente quer trabalhar com navegaçÃĢo pÃĄgina contato barra login barra
cadastro a gente precisa geralmente ter uma biblioteca que faça isso por exemplo o react hter dom que ÃĐ muito comum jÃĄ no next ele Traz esse roteamento dentro incluso nessa ferramenta outra coisa como a gente viu aqui no nosso guia que a gente vai ver na prÃĄtica aqui ÃĐ por exemplo a parte de revalidaçÃĢo de dados server components metadata de uma forma otimizada ou seja vocÊ quer construir um site um sistema que seja indexado no Google para quando alguÃĐm pesquisar nos buscadores seja encontrado de forma fÃĄcil esse seu site ou bem rankeado lÃĄ em cima
ou quando vocÊ tem pÃĄginas DinÃĒmicas por exemplo um ecommerce a gente tem e barra loja barra produto 1 Barra produto nÃĢo sei o qu entÃĢo esses produtos ou essas pÃĄginas vÃĢo sendo indexadas no Google tambÃĐm para quando alguÃĐm pesquisar alguma coisa Seja encontrado entÃĢo a gente consegue fazer isso muito fÃĄcil com o nextjs deixa eu abrir aqui o guia de novo outras coisas como lidar com middleware APP api handler que ÃĐ basicamente a gente chama de api na verdade ÃĐ H handlers nÃĐ entÃĢo VocÊ conseguir ter backend integrado dentro do mesmo projeto com o Next
EntÃĢo isso ÃĐ uma coisa que a gente pode criar aqui vamos lÃĄ entÃĢo pra gente começar pra gente fazer o nosso primeiro capÃtulo eu vou separar aqui embaixo à nos points aqui dentro da do nosso vÃdeo primeiro passo paraa criaçÃĢo de projeto como ÃĐ que a gente cria um projeto com next EntÃĢo dentro da documentaçÃĢo nextjs.org a gente copia aqui o comandinho eu vou criar aqui dentro da Pasta uma dendo NÃĢo crie nomes com acentos nome com caracter especial nem nome com espaço EntÃĢo vou colocar aqui o comando vou dar aqui um espaço aà vou
dar um nome que eu quero entÃĢo por exemplo Ah vou chamar aqui de aula a sua aula nÃĐ vou colocar esse nome aqui pro meu projeto vai se chamar aula e ele vai fazer algumas perguntinhas aqui tÃĄ essas perguntas com base nas versÃĩes elas podem mudar mas ÃĐ entendendo o que que ÃĐ cada coisa que ÃĐ importante EntÃĢo olha Ele fala Olha vocÊ jÃĄ quer iniciar o seu projeto com typescript no nosso caso eu quero EntÃĢo vou dar aqui um Yes quer com s link nesse caso eu nÃĢo vou colocar no pra gente nÃĢo nÃĢo
perder muito tempo com configuraçÃĢo de S lint EntÃĢo vou colocar no vou dar um Yes VocÊ jÃĄ quer o t ind CSS instalado dentro do projeto eu quero para facilitar aqui se vocÊ colocar no ele vai vir com CSS padrÃĢo tÃĄ E vocÊ jÃĄ quer colocar os arquivos nÃĐos seus componentes o seu search coding dentro Da pasta src que ÃĐ onde a gente vai modificar os arquivos sim eu quero que jÃĄ venha dentro da pasta src ÃĐ vocÊ jÃĄ quer vir com app houter app houter ÃĐ a forma de roteamento de pÃĄgina integrada nÃĐ Ou
seja a gente jÃĄ tem o sistema de file System routing dentro do Next que a gente vai conhecer o que quer na prÃĄtica EntÃĢo vou dar aqui um Yes e vocÊ quer criar jÃĄ com turbo pack nÃĢo quero EntÃĢo vou dar um no e vou dar um Yes aqui Import Alias eu vou dar aqui um Yes Apenas se quiser colocar novo aqui tambÃĐm nÃĢo tem problema vou dar um entra aqui apenas ele vai inicializar EntÃĢo esse nosso projeto enquanto ele vai criando Ãģ pega esse vÃdeo aqui compartilha pro seu amigo aà ou pra galera que
quer aprender next Beleza entÃĢo vamos aguardar Maravilha foi criado aqui Ãģ se a gente olhar dentro aqui do nosso CD aula entÃĢo acessi a pasta do nosso projeto vou abrir ali no meu vs code EntÃĢo abre aà a pasta do Projeto que vocÊ criou dentro do seu vest code vou abrir aqui vou dar um Yes e vou colocar aqui do ladinho pra gente poder ver isso aqui e o que que ele criou pra gente tÃĄ outra coisa agora que a gente criou o projeto Eu tambÃĐm jÃĄ vou rodar ele em desenvolvimento entÃĢo para rodar npm
Run espaço Dev tÃĄ entÃĢo com isso ele vai rodar o nosso projeto em desenvolvimento e ele vai subir aqui Ãģ falando que no meu caso pode atÃĐ mudar para vocÊ entÃĢo no meu caso tÃĄ rodando Na porta 3.000 EntÃĢo vou atÃĐ clicar aqui ou copia nÃĐ e abre aà local ruso 3000 vou abrir aqui do lado vou puxar aqui um pouquinho pro lado vamos esperar ele compilar e carregar EntÃĢo essa ÃĐ a cara Inicial hoje em dia eles ficam mudando toda hora a cara Inicial isso nÃĢo importa tÃĄ EntÃĢo essa ÃĐ a cara Inicial quando
a gente roda o projeto em next atualmente ÃĐ dessa forma aqui mas antes pra gente começar aqui a primeira coisa que a gente precisa entender ÃĐ entender A estrutura de pastos do nex JS Beleza entÃĢo bora lÃĄ vamos entender a estrutura de passas aqui quando a gente cria um projeto ele vai vir com alguns arquivos criados tÃĄ Primeiro começando de baixo aqui como a gente tÃĄ usando o typescript ele vem com a configuraçÃĢo do TS config EntÃĢo se a gente fosse acrescentar alguma configuraçÃĢo modificar ÃĐ aqui dentro do typescript para esse nosso projeto beleza outra
coisa que ele vem jÃĄ com o twind como a gente colocou para Para vir com a configuraçÃĢo do te end entÃĢo ele jÃĄ vem aqui outra coisa ele jÃĄ vem como ele ÃĐ um projeto que utiliza o node JS EntÃĢo a gente tem aqui o package Jason dentro do nosso projeto entÃĢo aqui dentro a gente vai ter as Death dependen sÃĢo as dependÊncias de desenvolvimento do projeto as dependÊncias que o projeto precisa como o react Atualmente como eu tÃī gravando para vocÊs ele tÃĄ usando a Última versÃĢo Hoje em dia a 15 nÃĐ 15.0.3 e
ele usa a versÃĢo 19 do react que ainda Nem foi lançada mas ele jÃĄ tÃĄ ÃĐ usando aqui tÃĄ EntÃĢo essas sÃĢo as dependÊncias que precisa para um projeto n funcionar perfeito e ele jÃĄ vem com alguns scripts aqui prÃĐ criados nÃĐ o script de Dev que a gente acabou de rodar para rodar em desenvolvimento o script de build pra gente gerar um build da aplicaçÃĢo jÃĄ jÃĄ a gente vai fazer isso tambÃĐm o start que ÃĐ para vocÊ gerar um build e quer testar como ÃĐ que o o projeto vai se comportar como se
tivesse rodando em ProduçÃĢo entÃĢo comando start aqui beleza depois disso ele vai vir com mais alguns arquivos como nest config que a gente pode passar configuraçÃĩes options extras para o nosso o nosso projeto nex TÃĄ alÃĐm disso ele vem aqui com algumas pastinhas como o Public que dentro ele vem com algumas imagens padrÃĢo como vocÊ pode ver vem com a imagem aqui Ãģ da logo do nex ele vem com algumas Logos aqui entÃĢo ele vem com alguns arquivos vem em svg tÃĄ entÃĢo vem alguns arquivos estÃĄticos Quando vocÊ quer ter um arquivo estÃĄtico nessa aplicaçÃĢo
por exemplo Ah eu tenho a logo do meu projeto vocÊ pode colocar dentro da pasta Public que essa aqui vai ser uma imagem estÃĄtica que vai ficar ali sempre no seu projeto tÃĄ entÃĢo vocÊ pode colocar dentro dessa pasta Public aqui dentro da pasta src vem o nosso search coding ou seja dentro dess RC à de fato onde a gente vai manipular e escrever o nosso projeto aqui com next entÃĢo aqui dentro ele vem vou Minimizar Aqui Ãģ com uma pastinha chamada app o app nada mais ÃĐ com o nosso file System routing ou seja
tudo que a gente colocar basicamente aqui dentro pode se tornar uma rota ou seja uma navegaçÃĢo da nossa aplicaçÃĢo um roteamento e uma navegaçÃĢo de pÃĄgina entÃĢo com o react a gente tem o nosso react hter Dom Por exemplo quando vocÊ quer criar navegaçÃĢo de pÃĄgina VocÊ trabalha com o react router Dom jÃĄ quando a a gente tem Connect ele jÃĄ vem com esse cara chamado file system Routing que ÃĐ o nosso app router aqui Ãģ se a gente procurar dentro da documentaçÃĢo em routing a gente tem aqui a pÃĄgina de como definir as rotas
entÃĢo ele dÃĄ atÃĐ um exemplo que tudo que a gente coloca dentro do nosso app pode se tornar aqui Ãģ uma uma rota dentro da nossa aplicaçÃĢo que ÃĐ algo sensacional EntÃĢo nÃĢo preciso ficar instalando biblioteca externa entÃĢo por exemplo dentro do pasta App ele vem com algumas Fontes PrÃĐ-advento navegador e tambÃĐm ele vem com o globals.css que ÃĐ a configuraçÃĢo aqui do dos do twind eu vou atÃĐ tirar isso aqui Ãģ vou deixar sÃģ o nosso Body vou tirar ess color aqui deixar sÃģ isso aqui dentro do body Ãģ Perdeu atÃĐ estilizaçÃĢo salvei o
cÃģdigo dentro aqui ele vem com um arquivo chamado page.ts que ÃĐ o componente react dessa pÃĄgina O que que a gente vai fazer eu vou dar um cont control a e vou deletar tudo isso aqui pra gente começar a criar A nossa pÃĄgina home Inicial entÃĢo Export Export default function e vou chamar aqui de home return e eu vou colocar aqui por exemplo uma div e um H1 pÃĄgina home aqui Ãģ Fechou entÃĢo a gente criou aqui e aqui sim eu preciso que seja Export default que o Next pede pra gente nÃĢo ÃĐ eu que
tÃī querendo ÃĐ o Next que pede pra gente fazer isso entÃĢo se a gente salvar isso aqui e a gente olhar Ãģ dentro do app a gente tem a nossa pastinha e dentro do App eu jÃĄ tenho direto um arquivo chamado do page.ts entÃĢo automaticamente esse cara aqui ÃĐ a nossa pÃĄgina inicial do site ou seja a nossa pÃĄgina home entÃĢo se eu acessar o meu meu site Ãģ localhost 23000 vocÊ pode ver que ele vai cair no nosso componente que a gente chamou de pÃĄgina home EntÃĢo esse aqui ÃĐ o caminho inicial a nossa
componente inicial da nossa aplicaçÃĢo beleza E alÃĐm disso a gente tem um arquivo chamado layout.txt Ptsx ÃĐ o arquivo basicamente de configuraçÃĢo do layout da nossa aplicaçÃĢo entÃĢo aqui dentro Ãģ eu eu tenho algum metadata vou tirar esse metadata vou tirar essas nossas Fontes aqui Ãģ vou tirar fonte aqui o metadata Vou tirar isso daqui Beleza vou tirar essa nossa classe aqui da fonte aqui Ãģ Beleza entÃĢo sÃģ vou deixar aqui oal aqui sÃģ beleza vou salvar isso aqui salvei Vou atualizar aqui nÃĢo quero configuraçÃĢo de fonte nenhuma entÃĢo aqui Dentro ÃĐ a configuraçÃĢo do
layout da nossa aplicaçÃĢo aqui onde a gente tem o nosso carinha chamado aqui que ÃĐ o Children o Children nada mais ÃĐ do que a pÃĄgina aonde que ÃĐ exibida entÃĢo basicamente aonde a gente vÊ esse Children aqui dentro do nosso layout Global da nossa aplicaçÃĢo Ãģ dentro do app a gente tem o layout entÃĢo ele ÃĐ o layout Global EntÃĢo dentro do childreen aqui ÃĐ basicamente como se tivesse renderizando a pÃĄgina por exemplo se a Gente tÃĄ na pÃĄgina home ÃĐ como se a gente tivesse renderizando esse componente aqui exatamente nesse local do tild
tanto ÃĐ que se eu vim aqui em cima do tiam por exemplo Ãģ e colocar um H1 teste teste Ãģ e eu salvar o meu cÃģdigo e eu atualizar na minha pÃĄgina home aqui Ãģ vocÊ pode ver pÃĄgina home em cima dela Olha lÃĄ o teste teste e como ele tÃĄ no nosso layout qualquer PÃĄgina em cima vai ter o teste teste se aqui embaixo aparece a minha pÃĄgina EntÃĢo se Em cima eu coloquei alguma coisa qualquer pÃĄgina que eu acessar dentro do meu projeto vai ter aqui esse teste teste EntÃĢo isso que ÃĐ muito
bacana E outra coisa que ÃĐ muito legal como ele jÃĄ traz esse roteamento baseado aqui no app eu posso criar mais pÃĄginas dentro da minha aplicaçÃĢo de uma forma simples por exemplo dentro do nosso app eu posso criar aqui mais uma pasta chamada contatos beleza dentro de contatos New file e para falar que isso aqui ÃĐ uma PÃĄgina Eu crio o arquivo chamado p tsx EntÃĢo vamos dentro criar o Export default function e contatos abro aqui return Vou colocar aqui uma div H1 pÃĄgina contatos e eu vou salvar entÃĢo agora como a gente criou aqui
Ãģ presta atençÃĢo a gente tem aqui dentro o nosso app ÃĐ onde bate a inicial dentro a gente tem o nosso arquivo page que ÃĐ a nossa pÃĄgina de home e dentro a gente tem agora um arquivozilla entÃĢo basicamente como a gente chamou de Contatos a pasta e dentro tem um page isso aqui se torna uma rota entÃĢo se eu vi no meu site aqui Ãģ percebe que a gente criou dentro do app entÃĢo se eu vir aqui barra contatos e eu tentar acessar Olha lÃĄ que legal pÃĄgina contatos Olha que sensacional nÃĐ E se
eu acessar a pÃĄgina home a gente jÃĄ tem a pÃĄgina home entÃĢo tudo que eu for criando aqui dentro pode se tornar uma rota por exemplo vou criar dentro do app mais uma pastinha chamada dashboard nÃĐ De painel dashboard dentro vou criar mais um aqui Ãģ page.ts dentro do dashboard vou atÃĐ copiar aqui o arquivo sÃģ para nÃĢo perder tempo nÃĐ E vou colocar aqui chamar de dashboard pÃĄgina painel dashboard Vou salvar isso aqui agora EntÃĢo olha sÃģ agora a gente tem o contatos e temos o dashboard aqui dentro que tem o page EntÃĢo como
a gente criou esse dashboard Esse nome que eu dei ÃĐ uma rota agora entÃĢo se eu acessar a barra contatos Agora existe se eu acessar a barra dashboard tambÃĐm existe olha sÃģ que legal nÃĐ e uma coisa que vocÊ começa a perceber ÃĐ que a gente tem o nosso layout Global em todas as pÃĄginas entÃĢo vocÊ pode ver que a gente tem o nosso layout Global aqui Ãģ que tÃĄ fora em todas as nossas pÃĄginas entÃĢo o tiring aqui onde ÃĐ renderizado a pÃĄgina e se a gente colocar alguma coisa em cima ou embaixo ÃĐ
renderizado em todas as pÃĄginas Porque pensa que o layout tÃĄ em Volta da nossa aplicaçÃĢo e dentro tem a pÃĄgina sendo renderizada entÃĢo se eu colocar aqui por exemplo reader da pÃĄgina e embaixo aparece aqui a pÃĄgina Ãģ e eu salvar tÃī no dashboard Olha lÃĄ reader da pÃĄgina se eu acessar a pÃĄgina home e eu de um enter Ãģ Olha lÃĄ pÃĄgina home e reader da pÃĄgina se eu acessar aqui o Barra contatos mesma coisa olha o reader aqui em cima e o pÃĄgina contatos aqui tÃĄ entÃĢo isso ÃĐ muito bacana outra coisa que
a gente pode fazer ÃĐ a gente Pode separar por exemplo um componente Ah eu quero ter um componente na minha aplicaçÃĢo que de fato tenha um header que ele esteja em todas as pÃĄginas entÃĢo por exemplo eu posso vir aqui vou vir aqui Ãģ fora do meu app que src vou criar aqui um New Folder dentro dela chamado components tÃĄ entÃĢo dentro do components eu vou criar uma nova pastinha chamado reader e dentro dela New file index.tsx porque aqui ÃĐ apenas um componente nÃĢo ÃĐ uma pÃĄgina components heer e a index EntÃĢo Export aqui eu
nÃĢo preciso dar default porque ÃĐ sÃģ um componente entÃĢo Export function e eu vou chamar aqui por exemplo de heer return e eu vou colocar aqui um heer uma tezinha de heer colocar aqui um H1 heer do projeto e eu vou salvar entÃĢo criamos o nosso componente se eu salvar isso aqui agora e eu e a gente vim dentro do nosso app layout e agora Ãģ vou tirar esse H1 daqui vou importar O componente para Exibir eu posso entÃĢo eu posso vir aqui Ãģ Import from ponto pon barra acessar o components Barra reader nÃĢo preciso
dar o Barra index posso deixar sem a barra no final que ele jÃĄ pega o arquivo index dess dessa pasta e eu vou puxar aqui Ãģ header eu posso colocar aqui em cima olha que sensacional entÃĢo renderizo o componente embaixo eu renderizo as pÃĄginas entÃĢo se eu salvar isso aqui agora toda a pÃĄgina Ãģ reader do projeto Se eu for para home reader do projeto Legal nÃĐ Eu separei um reader Zinho aqui bem simples sÃģ pra gente poder nÃĢo perder tempo aqui salvei vou colocar um header Zinho aqui Ãģ vou colar colocando com Twi CSS
depois eu posso deixar esse esse repositÃģrio para vocÊs nÃĢo tem problema tÃĄ mas ÃĐ sÃģ pra gente ver Ãģ que agora eu tenho um reader Zinho aqui em toda a minha pÃĄgina Ãģ pÃĄgina home barra se eu for aqui barra contatos Olha lÃĄ se eu for barra dashboard Olha lÃĄ que legal e o nosso e o nosso reader fica em todas As pÃĄginas tÃĄ e como a a gente tem navegaçÃĢo aqui de pÃĄgina jÃĄ incluso dentro aqui do nosso next a gente tambÃĐm pode fazer Linking dentro da nossa aplicaçÃĢo de forma fÃĄcil entÃĢo se eu
quiser por exemplo criar links de navegaçÃĢo aqui dentro da nossa aplicaçÃĢo como ÃĐ que eu faço a gente tem por exemplo o home e o e o posts aqui Ãģ que a gente vai ver nÃĐ entÃĢo eu quero que isso aqui seja links para navegar para essas pÃĄginas entÃĢo por exemplo aqui na Nossa na nossa home eu quero que tenha um link aqui entÃĢo para isso a gente pode importar acho que o seu digital ele jÃĄ completa para mim deixa eu ver aqui Ãģ link com l maiÚsculo vou dar um Tab aqui Ãģ ah jÃĄ
importou importa aqui do Next bar link E aà aqui dentro posso colocar o que eu quero por exemplo pÃĄgina ÃĐ descriçÃĢo vai ser home o href para qual link da minha pÃĄgina eu quero levar por exemplo barra Vamos colocar aqui barra sÃģ barra nÃĐ porque ÃĐ a home vou copiar Esse link vou colocar aqui nos posts por exemplo ÃĢ maravilha eu quero que aqui seja por exemplo posts e leve para Barra posts por exemplo e eu vou colocar mais uma vou duplicar aqui mais uma vez o li deixa eu separar aqui para ficar melhor para
vocÊ vocÊs no vÃdeo E aà eu quero que seja por exemplo dashboard que a gente jÃĄ criou nÃĐ entÃĢo barra dashboard Beleza se eu salvar isso aqui agora vamos lÃĄ salvei e eu voltar aqui na minha aplicaçÃĢo à vocÊ percebe que a Gente jÃĄ tem ele aqui se eu clicar no Home Ãģ vem pra pÃĄgina home se eu clicar aqui no posts Ãģ nÃĢo existe ainda e vocÊ percebe que o nosso header continua sendo exibido embaixo onde era para ser a pÃĄgina ele diz que nÃĢo existe Beleza a gente jÃĄ vai entender isso aqui se
eu clicar no dashboard existe o dashboard entÃĢo ele jÃĄ navega sensa entÃĢo a gente jÃĄ consegue ter navegaçÃĢo de uma forma muito simples dentro do Next aqui usando esse file System routing que eles chamam Aqui tÃĄ entÃĢo se eu voltar aqui no nosso guia a gente entendendo um pouquinho mais sobre roteamento e navegaçÃĢo a gente vai evoluir ainda mais aqui dentro mas outra coisa que ÃĐ importante a gente entender aqui dentro tambÃĐm ÃĐ que a gente pode ter de uma forma muito simples por exemplo pÃĄginas de not found que a gente acabou de ver entÃĢo
eu posso ter uma pÃĄgina personalizada para uma pÃĄgina que nÃĢo existe na aplicaçÃĢo como por exemplo à Barra posts a gente ainda NÃĢo criou ou por exemplo barra qualquer coisa que o usuÃĄrio digitar nÃĢo existe nÃĐ entÃĢo eu quero criar uma pÃĄgina de not found para isso eu posso criar ele Global por exemplo dentro do nosso roteamento que ÃĐ o nosso pasta app New file e eu vou chamar ele de not trof P tsx tem que ser com esse nome tÃĄ NÃĢo ÃĐ eu que tÃī inventando ÃĐ o a a documentaçÃĢo do Next que pede
pra gente entÃĢo se a gente olhar aqui por exemplo not found Ãģ lÃĄ eles pedem para que seja Esse nome de arquivo Beleza entÃĢo aqui dentro desse cara a gente pode criar criar o nosso Export default function not found return vou criar aqui um um return Zinho aqui vou colocar aqui uma div Vou colocar aqui um H1 por exemplo pÃĄgina 404 nÃĢo encontrada beleza aà eu vou colocar aqui por exemplo uma parÃĄgrafo aqui essa pÃĄgina que tentou acessar nÃĢo existe beleza perfeito e aà tambÃĐm a gente pode colocar por exemplo um link nÃĐ V dar
um Tab aqui Ãģ jÃĄ Importou o nosso next bar link eu quero colocar aqui por exemplo voltar para home E aà quero que leve o usuÃĄrio HF para a pÃĄgina home aqui vou vir aqui no nosso div vou dar um Class name Flex items Center e um jfy Trace o Center tambÃĐm Maravilha e vou colocar aqui no H1 tambÃĐm um Class name text Center e um fonte traço bold aqui vou salvar isso aqui agora vou falar que a gente vai ter um Flex colum E tambÃĐm como eu nÃĢo vou centralizar porque eu nÃĢo tenho a
altura Da pÃĄgina se eu tivesse aqui uma mÃnima mÃnima altura aqui por exemplo de 100 de screen aqui que seria sem VH ele ia centralizar mas eu nÃĢo peguei a medida do nosso heer entÃĢo vou deixar sem essa mÃnima altura e aqui no nosso H1 eu sÃģ vou distanciar um pouquinho vou colocar aqui um um margem top um MT colocar aqui uns nove sÃģ para dar um distanciamento aqui Ãģ e tambÃĐm no nosso H1 eu vou colocar aqui um text traço 7 6 XL aqui Ãģ sÃģ para ficar maior tÃĄ sÃģ para ficar GrandÃĢo para
vocÊs entÃĢo nÃĢo nÃĢo tÃī ligando pra estilizaçÃĢo por enquanto porque o foco ÃĐ o Next aqui tÃĄ EntÃĢo dessa forma quando a gente cria esse arquivo esse arquivo ele ÃĐ um componente que ele ele ÃĐ renderizado e mostrado na nossa aplicaçÃĢo quando a gente acessa uma pÃĄgina not found Ou seja que nÃĢo existe EntÃĢo nÃĢo preciso de configuraçÃĩes extra para criar Isso entÃĢo isso ÃĐ muito legal entÃĢo se eu salvar aqui Ãģ quando eu tento acessar Uma pÃĄgina que nÃĢo existe Ãģ jÃĄ renderiza posso Navegar para Minhas pÃĄginas aqui Ãģ home dashboard se eu for
pro posts Ãģ posts ainda nÃĢo existe Ãģ nÃĢo encontrada E se eu criar o posts vamos lÃĄ entÃĢo por exemplo se a gente vier aqui dentro de app New Folder vou chamar de posts Ãģ dentro de posts New file page.ts estÃĢo falando que isso ÃĐ uma pÃĄgina E aà Export default function posts page return e aqui vai ser o Nossa div H1 todos os posts por exemplo vou colocar Aqui vou salvar se a gente salvar agora Ãģ existe a barra posts entÃĢo à Barra posts agora existe Olha que legal aà ele renderiza aqui sem nenhum
problema Olha que sensacional nÃĐ entÃĢo muito legal isso jÃĄ entendendo que a gente a gente pode tambÃĐm ter pÃĄginas de notf entÃĢo agora dentro do Next Outro ponto importante ÃĐ a gente falar sobre met datas dentro do projeto Connect EntÃĢo vou atÃĐ dar aqui um cheque jÃĄ pra gente falar sobre isso dentro do nossos Projetos e para que que isso vai servir nÃĐ entÃĢo a gente pode usar dentro de um HTML puro met datas que sÃĢo metadados que a gente tem vÃĄrias e vÃĄrias tags para poder melhorar a indexaçÃĢo do nosso site no Google nos
buscadores tem um ranqueamento nos buscadores E alÃĐm disso a gente consegue criar isso de forma forma dinÃĒmica Única dentro de um layout ou cada pÃĄgina tem um metadata diferente e manipular isso usando aqui um componente de forma simples EntÃĢo olha Que legal se a gente procurar aqui por exemplo dentro da documentaçÃĢo sÃģ para vocÊs entenderem que a gente vai aplicar isso na prÃĄtica que ÃĐ importante para vocÊs olharem tambÃĐm entÃĢo aqui dentro se vocÊ procurar por seo metadata n seo aqui Ãģ a acessar o metadata Api e a gente olhar aqui por exemplo que vocÊ
pode gerar static metadata ou seja met datas dentro de uma pÃĄgina que sÃĢo estÃĄticos nÃĐ que sÃĢo fixos o a tÃtulo a descriçÃĢo alguma coisa que vocÊ quer Passar e vocÊ pode gerar metadata de forma dinÃĒmica por exemplo vocÊ tem o exemplo lÃĄ da nossa e-commerce vocÊ tem uma url que ÃĐ dinÃĒmica e pode gerar met datas com base naquela URL fazer uma requisiçÃĢo http pegar o nome do produto a imagem a descriçÃĢo e gerar isso de forma dinÃĒmica para cada ID EntÃĢo isso ÃĐ muito legal tÃĄ entÃĢo bora entender como ÃĐ que funciona isso
aqui na prÃĄtica os met datas dentro do do Next entÃĢo para isso ÃĐ muito massa a gente pode vir por Exemplo vamos vir dentro da nossa pÃĄgina aqui de home Ãģ que ÃĐ a nossa page Ãģ dentro do app page tsx e aqui dentro a gente pode criar aqui em cima tÃĄ um objeto entÃĢo Ãī meu Deus meu teclado posso criar aqui um objeto Export con metadata tudo minÚsculo tÃĄ E aà aqui dentro para ter uma um uma tipagem eu posso colocar aqui dois pontos metadata vou dar um Tab Ãģ para importar do Next E
aà eu posso criar os nossos Metadatos de forma de dinÃĒmica por exemplo nosso title Vou colocar aqui a pÃĄgina home E aà vai ser aula nextjs do zero por exemplo nÃĐ E aà eu posso colocar tambÃĐm uma description que vai ser por exemplo aprendendo nextjs do zero com sujeito programador Beleza vai ser isso aqui tÃĄ entÃĢo se eu salvar isso aqui agora percebe que a gente criou em cima do nosso componente tÃĄ Por enquanto na pÃĄgina home entÃĢo se eu salvar e eu voltar no projeto e eu vir aqui dentro Da nossa pÃĄgina de home
Eu vou acessar vocÊ percebe aqui em cima que ele jÃĄ vai ter um tÃtulo Olha que olha que legal entÃĢo se eu abrir um inspecionar que ÃĐ a melhor forma pra gente poder visualizar isso aqui Opa deixa eu fechar isso aqui vi aqui dentro dos elementos nÃĐ na parte aqui do Head se a gente abrir o head deixa eu fechar isso aqui tambÃĐm a gente vai ver que ele tem alguns metas aqui por exemplo agora ele inclui o metadata nÃĐ chamado title que basicamente ÃĐ o TÃtulo dessa pÃĄgina que fica ali em cima isso ajuda
a indexar no Google tambÃĐm aà ele tem a meta data agora description que ele colocou entÃĢo sensacional com o conteÚdo que a gente passou se a gente abrir por exemplo a pÃĄgina dashboard barra dashboard e eu abrir o inspecionar dela vim aqui no elements abrir aqui o head vocÊ percebe que nÃĢo tem por quÊ Porque a gente colocou por enquanto apenas dentro da pÃĄgina chamada aqui do Home entÃĢo aqui dentro vocÊ tem os Metadatasources compartilha no no ex lÃĄ no Twitter ou no seu WhatsApp e ele cria aquele link cria uma prÃĐ-visualizaçÃĢo com tÃtulo uma
descriçÃĢo e uma imagem de prÃĐ-visualizaçÃĢo Esse ÃĐ o open graph Esse cara ÃĐ responsÃĄvel entÃĢo para isso a gente pode colocar tambÃĐm personalizado por exemplo olha no title aqui aprendendo nextjs com sujeito no YouTube sei lÃĄ colocar um tÃtulo e eu posso vou pegar a mesma descriçÃĢo posso colocar uma DescriçÃĢo tambÃĐm entÃĢo quando vocÊ compartilhar isso esse ÃĐ o tÃtulo que vai aparecer naquela prÃĐ-visualizaçÃĢo e essa descriçÃĢo e eu posso tambÃĐm mais alÃĐm que isso vamos mais a gente pode images e dentro do imag vocÊ pode colocar um Array e aqui dentro vocÊ pode colocar
a URL de imagens entÃĢo por exemplo eu tenho uma url aqui lÃĄ do nosso site que eu aa acho que ainda existe do TIP Jobs Ãģ deixa eu ver se existe nÃĢo sei se existe Ah nÃĢo existe Mais vamos dar um ponto png ah existe ÃĐ ponto png entÃĢo se eu acessar Por exemplo essa URL aqui Ãģ e eu colocar ela aqui dentro do nosso pph Toda vez que vocÊ compartilhar esse site Essa vai ser a imagem de prÃĐ-visualizaçÃĢo tÃĄ entÃĢo isso muito legal vou tirar isso aqui e eu vou tirar essa imagem aqui porque
a gente nÃĢo tem imagem mas sÃģ para mostrar para vocÊs e alÃĐm disso a gente pode passar vÃrgula e outra propriedade como robots aqui nÃĐ eu posso passar aqui ele Index como true posso passar aqui tambÃĐm o follow como true se vocÊ quer que o robÃī nÃĐ faça o follow aqui e pode colocar um no cash tambÃĐm eu nÃĢo quero que tenha Cash EntÃĢo vou colocar dizendo que a gente nÃĢo tem Vou colocar aqui true eu posso passar tambÃĐm dentro do prÃģprio Google bot falar olha se vocÊ quer quer um index se vocÊ quer um
follow VocÊ pode passar todas essas propriedades entÃĢo se eu salvar isso aqui agora a gente colocou o open graph E essa parte dos robots se eu atualizar por exemplo a nossa pÃĄgina home que ÃĐ aqui que a gente tÃĄ mexendo atualizar a pÃĄgina home abre o inspecionar vem no elemento aqui Ãģ Head e a gente olha para ver se foi inserido nÃĐ entÃĢo se a gente olhar met datata description tÃĄ aqui Ãģ os robots tÃĄ aqui tambÃĐm olha aqui o Google bot jÃĄ tÃĄ aqui o que qual que ÃĐ os parÃĒmetros que a gente colocou
eh og title que ÃĐ o open graph tÃĄ aqui og description a gente tirou a imagem nÃĐ SenÃĢo estaria aqui og 2 p Image ÃĐ o do Twitter que ele jÃĄ gera tambÃĐm quando vocÊ compartilhar no Twitter do openg graph que ÃĐ a prÃĐ-visualizaçÃĢo nÃĐ entÃĢo a gente jÃĄ consegue fazer toda essa essa parada dinÃĒmica aqui entÃĢo como a gente colocou na pÃĄgina home se a gente acessar outras pÃĄginas Ãģ nÃĢo tem ainda Mateus eu tenho que colocar em todas as pÃĄginas vocÊ pode colocar em todas como vocÊ pode colocar de forma global para caso
a pÃĄgina nÃĢo tenha ele utiliza Aquele lÃĄ entÃĢo por exemplo vou copiar isso aqui e eu posso colocar dentro Ãģ nosso app layout ptsx lembra que isso aqui ÃĐ o layout Global tem o nosso reader entÃĢo em todas as pÃĄginas eu quero colocar um um meta tag por exemplo vamos dar aqui um control espaço vou colar EntÃĢo eu quero que o tÃtulo seja por exemplo aula nextjs do zero colocar isso aqui como tÃtulo na description vou deixar mesmo o resto eu vou deixar a mesmo entÃĢo se eu salvar isso aqui agora Caso a pÃĄgina nÃĢo
tenha um metatag ele vai usar essa aqui e caso tenha ele vai usar que ela tem entÃĢo se eu salvar e eu na minha p pÃĄgina home Ãģ vou vir na pÃĄgina home aqui de novo vocÊ vai ver que ele vai usar o que a gente colocou na pÃĄgina home que ÃĐ home e ÃĐ isso aqui Ãģ se eu for na dashbord Ãģ a aula next aà ele usa o que a gente colocou no layout EntÃĢo olha que forma fÃĄcil nÃĐ da gente fazer toda essa parte de met tags dentro da nossa aplicaçÃĢo EntÃĢo jÃĄ
dei um Cheque aqui e agora o prÃģximo capÃtulo que a gente vai falar aqui ÃĐ sobre server components client components o que que sÃĢo esses caras e como que a gente pode ÃĐ entender esses caras aqui na prÃĄtica EntÃĢo bora lÃĄ vou Minimizar isso aqui vou fechar isso aqui pra gente começar vamos vir dentro do nosso posts pages aqui tÃĄ entÃĢo aqui eu tenho componente e por padrÃĢo o que a gente precisa entender dentro do Next que a gente vai ter componentes que sÃĢo Criados quando a gente cria um componente igual a gente criou aqui
que eles sÃĢo server components tÃĄ entÃĢo toda vez que a gente cria um componente assim Ãģ padrÃĢo ele ÃĐ um componente que ele ÃĐ renderizado ele ÃĐ gerado pelo lado server Side entÃĢo a gente vÊ o que que acontece nisso aqui a gente vÊ menos JavaScript sendo eh gerado izado pelo lado do cliente ou seja se a gente olhar aqui por exemplo ÃĐ que aqui a gente nÃĢo tem nada nÃĐ sÃģ um H1 aqui mas por exemplo e a gente olhar aqui dentro do Network eu vou dar um presta atençÃĢo deixa eu diminuir um pouquinho
aqui Ãģ na parte aqui Ãģ onde fala quanto de mega que ele tÃĄ carregando aqui entÃĢo se eu pegar aqui e eu atualizar o dashboard vocÊ vai ver que deu 7.0 M Beleza agora se eu tivesse um componente client que ÃĐ por exemplo se vocÊ cria um projeto Com react Puro eles sÃĢo componentes client ou seja sÃĢo componentes que T reatividade sÃĢo Componentes que podem ter clique de BotÃĢo use state use effect hooks EntÃĢo sÃĢo componentes que sÃĢo renderizados pelo lado do client todo JavaScript entÃĢo se vocÊ tem muitos imports aqui por exemplo de bibliotecas
que vocÊ tem aqui dentro e sÃĢo componentes client todo o JavaScript que vai ficar responsÃĄvel por carregar vai ser no lado client EntÃĢo vocÊ vai ver que isso aqui vai ser muito maior tÃĄ claro que aqui a gente tÃĄ 7 Meg porque nÃĢo tem nada no Componente mas se fosse um componente Client que tem vÃĄrios imports e vÃĄrias coisas para ser renderizado no lado do client Isso aqui vai ficar bem mais pesado entÃĢo a gente traz muito mais serviço pro lado do client que nÃĢo ÃĐ tÃĢo interessante EntÃĢo com a chegada do dentro do Next
do server component e do client component uma das coisas que ele ganha ÃĐ essa performance tirando a responsabilidade de vocÊ renderizar essas coisas pelo lado do client entÃĢo a Gente pode trazer muita coisa jÃĄ prÃĐ criada renderizada ali gerada pelo lado do server Side que ÃĐ do Servidor EntÃĢo o que a gente precisa entender aqui ÃĐ que a gente tem dois tipos que sÃĢo server components e os client components por padrÃĢo quando vocÊ cria um componente tÃĄ vocÊ vai sempre ter um componente sendo renderizado do lado do servidor tÃĄ se a gente colocar aqui o
que que a gente tem que a gente ganha com o server component como ele ÃĐ renderizado do lado do Servidor a gente pode fazer o quÊ chamadas requisiçÃĩes http chamadas num banco de dados se a gente quer o que a gente quiser a gente pode fazer dentro do componente entÃĢo por exemplo a gente tÃĄ aqui na pÃĄgina de posts nÃĐ entÃĢo vamos supor que vocÊ quer buscar da api alguns posts que vocÊ vocÊ tem que alistar os seus posts aqui a gente pode fazer sem necessidade de usar hooks por exemplo eu nÃĢo preciso disso porque
a gente tÃĄ no lado server aqui lembra que Ele passa pelo server quando chega aqui no cliente ele jÃĄ passou pelo server entÃĢo a gente pode fazer essa requisiçÃĢo direta dentro do componente jÃĄ quando a gente tÃĄ dentro de um react puro a gente precisa um react query ou um use effect a gente precisa de algo nÃĐ client para ter essa reatividade de buscar de uma API lÃĄ entÃĢo como que eu faço para criar um componente client por exemplo se eu quiser criar um componente que ÃĐ uma pÃĄgina que seja um componente client ÃĐ Tranquilo
a Única coisa que vai mudar ÃĐ que a gente vai colocar a diretiva aqui no topo do componente chamada use client a partir da hora que numa pÃĄgina ou em um componente vocÊ colocar use client esse componente aqui ele ÃĐ gerado lado cliente tÃĄ se eu salvar isso aqui agora esse componentes a gente atualizando por enquanto a gente nÃĢo vai ver nenhum efeito Mas agora vamos entender os dois na prÃĄticas o que que cada um tem de diferença EntÃĢo olha sÃģ eu vou vir aqui TÃĄ vou tirar esse US client e vamos entender como que
a gente consegue EntÃĢo se a gente fosse fazer uma requisiçÃĢo http usando server component eu posso transformar o nosso a Sync function componente usando a Sync e eu posso diretamente dentro do corpo do componente fazer uma requisiçÃĢo http EntÃĢo posso con ÃĐ vamos chamar aqui de response igual await await patch eu vou pegar aqui uma API eu separei uma map pra gente poder trabalhar que ÃĐ essa Dumy Jason aqui Ãģ vou colocar ela aqui tÃĄ entÃĢo vou fazer uma requisiçÃĢo se a gente acessar essa api ela vai trazer uma listagem de posts se a gente
olhar aqui Ãģ listagem de posts que cada objeto tem essas propriedades aqui eu V atÃĐ criar uma tipinha aqui uma interface chamar aqui de response aqui e vou criar aqui em cima tambÃĐm uma interface data props colocar post props que vai ter um ID que ÃĐ um Number deixa eu ver aqui Ãģ el tem um ID um title um Body entÃĢo ID title Body e ele tem tambÃĐm um colocar o user ID por exemplo user ID ÃĐ um Number e eu vou falar aqui quando a gente recebe da requisiçÃĢo a gente recebe uma propriedade chamada
posts que dentro entÃĢo tem os nossos posts entÃĢo aqui dentro a gente recebe uma propriedade posts que dentro a gente tem uma Array de post props tÃĄ entÃĢo quando a gente faz uma requisiçÃĢo depois como a gente tÃĄ usando fat eu vou usar aqui o conch Data iG aight response Jon tÃĄ entÃĢo a gente espera transformaçÃĢo em e como a gente tÃĄ usando o typescript eu vou falar entÃĢo dois pontos que o o objeto que a gente recebe ÃĐ esse response vou chamar aqui de response props entÃĢo a gente recebe esse response props aqui beleza
entÃĢo se eu coloco o mouse em cima agora olha que legal jÃĄ tÃĄ aqui se eu der um console.log nesse data Olha que interessante a gente tÃĄ dentro do corpo do nosso componente aqui Fazendo uma requisiçÃĢo http e embaixo tÃĄ sendo aqui os itens do nosso componente entÃĢo se eu salvar e eu voltar aqui no meu barra posts e eu der um ent aqui um F5 se a gente abrir aqui o nosso CMD Deixa eu tirar um pouco o zoom vocÊ vai ver aqui Ãģ olha que legal como a gente tÃĄ no server Side olha
aqui o nosso nossos itens sendo renderizados no lado aqui nÃĐ do Servidor aqui no nosso CMD entÃĢo a gente jÃĄ vÊ aqui Ãģ todos Nossa ele busca vÃĄrios posts nÃĐ Deixa eu ver Aqui vÃĄrios e vÃĄrios posts aqui Ãģ vÃĄrios posts entÃĢo a gente consegue fazer a renderizaçÃĢo do lado do servidor e quando chega aqui pro usuÃĄrio jÃĄ tÃĄ render jÃĄ tem os itens buscados da api eu posso por exemplo renderizar posso abrir aqui por exemplo uma colocar uma div aqui um data.on posts.map vou abrir cada post por exemplo E aà dentro eu posso renderizar
cada post por exemplo uma div propriedade Key post pid Vou colocar Aqui um H2 abre e fecho aqui post.on Tile e vou colocar tambÃĐm embaixo Aqui Ãģ uma um parÃĄgrafo post ponto colocar aqui B nÃĐ entÃĢo maravilha se eu salvar isso aqui agora olha que legal se eu atualizar quando chega aqui para mim Ãģ vocÊ percebe que jÃĄ tem os posts sendo renderizados Vamos sÃģ melhorar um pouquinho a visualizaçÃĢo para nÃĢo ficar tudo grudado aqui nÃĐ entÃĢo a gente pode colocar aqui uma div colocar um Class como Flex Flex colum um GAP de dois Colocar
de quatro aqui para distanciar cada post cada iten Zinho aqui dentro aqui na nossa div eu vou colocar um Class name BG Grey traço 200 um p de do colocar um p de qu aqui Ãģ para ficar um pouco mais distanciado beleza vou colocar aqui aqui tambÃĐm um MX de do para dar um distanciamento na esquerda e na direita vou dar aqui tambÃĐm o nosso rounded MD para dar um arredondamento na bordinha o nosso title aqui vou dar um Class name fonte traço bold sÃģ para ele Ficar pra gente saber que ÃĐ o tÃtulo nÃĐ
E aqui no nosso H1 vou dar aqui um Class name text Center e um MT de C aqui sÃģ para dar uma distanciada um MB de do para distanciar um pouquinho embaixo e o fonte de bold aqui text tro 3xl deix um pouquinho maior tÃĄ entÃĢo aqui a gente tem todos os nossos posts tÃĄ nÃĢo tÃī ligando muito para estilizaçÃĢo por enquanto entÃĢo a gente percebe que se vocÊ dÃĄ um F5 aqui Ãģ quando vocÊ recebe aqui quando carrega visualmente No lado do client vocÊ jÃĄ tem os posts vocÊ nÃĢo tem aquele efeito de loading
aqui porque isso tÃĄ sendo renderizado pelo lado do server a gente tem um componente que ÃĐ server component entÃĢo quando chega no lado do client jÃĄ tÃĄ renderizado se a gente criasse uma pÃĄgina que tem um lado client Olha sÃģ olha a diferença Vou criar outra pÃĄgina aqui tÃĄ vou criar aqui dentro do app new folder vou chamar de teste vou criar aqui uma New file Page.ts eu vou pegar aqui o nosso componente deixa eu pegar aqui o post deixa eu copiar sÃģ a parte do da div aqui Ãģ Beleza vou colocar aqui um R
funk sÃģ para criar e page test Beleza eu vou colocar aqui o nosso H1 colocar sÃģ o H1 por enquanto e pÃĄgina client sÃģ pra gente ter V dar um enter Zinho aqui para quebrar vou salvar isso aqui agora entÃĢo agora vou vir aqui e vou transformar Ãģ use client dessa forma A gente tÃĄ transformando toda a pÃĄgina Test em US client entÃĢo se eu salvar isso aqui agora se a gente acessar barra test foi o nome que eu dei Olha lÃĄ pÃĄgina client Beleza e como a gente usou o US client eu nÃĢo posso
mais usar aqueles recursos que a gente acabou de usar entÃĢo por exemplo se eu copiar aqui o que a gente fez aqui Ãģ nÃĐ que ÃĐ a requisiçÃĢo dentro do componente Ãģ e eu colocar aqui Ãģ assy transformar nosso componente assÃncrono e aqui dentro eu Tentar o usar Ãģ e eu salvar isso aqui vou atÃĐ tirar a tipagem sÃģ para nÃĢo ficar dando erro de tipagem e eu salvar isso aqui agora e eu atualizar esse barra teste vocÊ vai ver que ele vai acusar erros aqui e ele vai falar olha se vocÊ tÃĄ usando aink
a weight eles nÃĢo sÃĢo suportados dentro de um clar component only ou seja apenas no server component agora esse nosso componente ele ÃĐ renderizado no lado client entÃĢo a gente perde isso aqui mas a gente ganha O que entÃĢo Mateus a gente ganha um componente react padrÃĢo Ou seja posso ter use state posso ter use effect entÃĢo eu posso por exemplo vou criar aqui um US state por exemplo um conch eh vou chamar aqui de posts set posts igual use state V dar um Tab aqui para ele importar vai começar com a r vazio eu
quero criar um use effect para buscar da nossa api entÃĢo use effect por exemplo nÃĐ um use effect padrÃĢozinho aqui beleza vou dar um Tab aqui para ele completar Para mim e maravilha entÃĢo ele criou um use effect aqui que ele vai fazer um fat quando o fat der tudo certo ele vai transformar em Jason e aà quando transformar em onde a gente vai passar os nossos posts lÃĄ para dentro aqui dos nossos posts Beleza entÃĢo aà pra gente renderizar deixa eu pegar atÃĐ o nosso Array lÃĄ renderizado aqui do nosso barra posts aqui Ãģ
pegar aqui o nosso arrei beleza e vou renderizar aqui posso acessar os post diretamente que ÃĐ o nome Do nosso US state e aqui ele vai dar que ele nÃĢo encontrou a tipagem Vou colocar aqui a nossa tipagem dois pontos n sÃģ para ele parar de acusar o erro que nÃĢo importa para mim a tipagem EntÃĢo vou salvar isso aqui e precisamos tirar o assn aqui tambÃĐm salvei EntÃĢo essa a forma padrÃĢo do componente client e olha a diferença vou vir aqui a gente tÃĄ no Barra test que ÃĐ o componente renderizado no client Ãģ
vou dar um cont control F5 aqui olha lÃĄ ele dÃĄ aquela Piscada por quÊ Porque renderiza um componente chega aqui pra gente ou seja o nosso layout aqui por exemplo E aà aqui quando chega na parte client ele vai disparar um Side effect ou seja o nosso use effect para fazer a requisiçÃĢo quando tiver requisiçÃĢo ele mostra ele passa pro nosso US state E aà reflete essa renderizaçÃĢo que renderiza aqui o nosso post e entÃĢo com isso a gente tem aquele layout shift nÃĐ que ÃĐ renderizar que à s vezes ÃĐ tudo bem VocÊ quer que
Seja dessa forma mas à s vezes nÃĢo faz tanto sentido vocÊ quer trazer jÃĄ os dados prontos por exemplo renderizados nÃĐ entÃĢo a gente Dessa forma tem um componente client onde a gente consegue ter acesso à reatividade como US state aqui a gente pode ter acesso por exemplo a Button por exemplo Button eu posso ter teste eu posso ter um on Click vou dar aqui uma funçÃĢo anÃīnima por exemplo Alert test eu posso ter isso de forma entÃĢo eu posso ter algo de dinÃĒmico na Nossa aplicaçÃĢo porque ele ÃĐ um componente client entÃĢo se eu salvar
a gente colocou um botÃĢo lÃĄ embaixo nÃĐ Deixa eu vir aqui embaixo Ãģ nosso botÃĢo teste vou subir esse botÃĢo Ãģ subir esse botÃĢo aqui em cima depois do H1 vou colocar ele aqui Ãģ EntÃĢo se a gente olhar tem um botÃĢozinho um botÃĢo chamado teste se eu clicar Ãģ tem um efeito de um clique uma reatividade EntÃĢo a gente tem esse efeito aqui olha lÃĄ ele demora um pouquinho agora se a gente acessar o Nosso barra posts à vocÊ percebe que quando carrega o post Ãģ tÃī dando cont control F5 aqui Ãģ ele jÃĄ
aparece renderizado porque ele lÃĄ do lado do servidor Beleza entÃĢo se a gente voltar aqui na parte do server component no nosso barra posts e quando a gente tÃĄ dentro de um server component a gente nÃĢo tem acesso por exemplo a US state dentro do componente server entÃĢo por exemplo se vocÊ tentar aqui dentro do seu componente Ãģ tÃī aqui no nosso Componente de posts que ÃĐ um server component nÃĐ se eu vier aqui tentar criar uma US state Ãģ conche V dar aqui um teste set test igual use state vou dar um Import aqui
a eu vou criar um estado aqui Ãģ teste ah vou vamos mandar aqui para nome e nome e aà o nome vai ser Mateus Por exemplo Beleza se eu salvar aqui Ãģ olha que interessante ele vai falar pra gente que eu nÃĢo posso nÃĐ usar o News state eles sÃĢo apenas Ãģ react hooks only works Ou seja ele apenas funciona em client component entÃĢo quando a gente tÃĄ num componente server eu nÃĢo tenho acesso a essa reatividade por quÊ Porque como que vai ser reativo se ele vai ser renderizado e criado lÃĄ no lado do
servidor quando chega para mim ele jÃĄ sÃģ devolve nÃĐ ele cuspe ali pra gente ÃĐ o que a gente jÃĄ tem e que foi renderizado e que foi gerado lÃĄ no lado do server entÃĢo a gente nÃĢo tem acesso a isso aqui entÃĢo vocÊ pode ver que eu nÃĢo consigo Usar isso aqui tÃĄ mas aà vocÊ pode estar se perguntando uma coisa importante nÃĐ ah Mateus beleza como ÃĐ que faz entÃĢo para mim ter a junçÃĢo desses dois caras para ter algo reativo para ter algo dinÃĒmico porque por exemplo eu quero ter um server component
que busca api legal demais mas eu quero ter tambÃĐm ÃĐ um Client component que tem ali junto alguma reatividade eu posso renderizar um server component e dentro tem um client component vocÊ pode entÃĢo vocÊ Pode fazer o qu VocÊ pode ter um server component e dentro do seu server component VocÊ pode ter um client component Beleza vocÊ pode fazer isso sem nenhum problema entÃĢo por exemplo se eu salvar aqui Ãģ eu posso criar aqui eu vou criar aqui dentro do nosso components tÃĄ vou criar aqui por exemplo um New Folder vou chamar de buton dentro
desse buton vou criar um New file index.tsx e eu vou criar aqui um botÃĢo entÃĢo Export function Button beleza Return Maravilha quero colocar aqui uma div um Button por exemplo alterar nome aqui tÃĄ EntÃĢo esse ÃĐ um botÃĢozinho aqui E lembra que sempre que eu falei para vocÊs que quando a gente cria uma pÃĄgina cria um componente sem especificar aquele usic Cent ele ÃĐ um componente que ele ÃĐ gerado pelo pelo lado do servidor entÃĢo sempre no next quando vocÊ criar sem especificar ele ÃĐ um componente server component Mas lembra que a gente nÃĢo quer
eu quero que ele seja um use Client Beleza entÃĢo a gente falou que ÃĐ um use client agora eu ganho tudo a reatividade EntÃĢo posso por exemplo vou colocar aqui por exemplo nosso const nome set nome igual use state sÃģ pra gente ver que eu posso ter um estado aqui entÃĢo vai ser sujeito programador vou criar uma funçÃĢo handle handle Change name Beleza entÃĢo vou criar uma funçÃĢo handle Change name aqui eu quero criar ela como uma function normal aqui Ãģ para ficar melhor aqui para vocÊs no VÃdeo e quando vocÊ clicar no handle Change
name ele vai mudar de sujeito programador para Mateus Fraga entÃĢo no botÃĢo Quando vocÊ clicar on Click handle Change name entÃĢo a gente criou aqui um componente Ãģ use client que tem reatividade que troca que faz alguma açÃĢo salvei agora eu posso importar sem nenhum problema dentro de um componente que ÃĐ server nÃĢo tem problema Olha sÃģ todos os posts posso importar aqui o nosso Button V dar um Tab aqui Ãģ deixa Eu ver se ele jÃĄ importou para mim Ãģ Ãģ jÃĄ importou aqui para mim qualquer coisa importa o caminho se eu salvar isso
aqui agora vocÊ vai ver aqui Ãģ alterar nome à posso clicar nÃĢo tem nenhum problema vamos colocar lÃĄ no nosso button para exibir aqui embaixo vou dar um BR aqui Ãģ e eu vou colocar aqui por exemplo um H3 abre e fecha os Chaves e eu vou colocar aqui o nosso US state nome para ser exibido colocar aqui atÃĐ um nome dois pontos salvei EntÃĢo olha sÃģ se eu der um F5 à vocÊ percebe que tem o nosso botÃĢo alterar nome tem o nosso US state sendo renderizado aqui sem nenhum problema e o Next vai
trazer o que ÃĐ do componente server sendo renderizado pelo lado server e como a gente tem um componente client aqui no meio dele beleza essa parte aqui esse componente ÃĐ renderizado pelo lado do client o restante nÃĢo tÃĄ entÃĢo ele faz essa essa parte de forma inteligente tÃĄ entÃĢo nosso botÃĢo tÃĄ aqui Ãģ se eu clicar em alterar o nome Olha lÃĄ Mateus Fraga entÃĢo consigo ter essa reatividade sem nenhum problema entÃĢo posso ter um componente server e dentro ter componentes client AlÃĐm disso quando a gente tÃĄ dentro de um componente server a gente pode
tambÃĐm ter vou dar aqui a gente pode ter tambÃĐm um carinha que a gente chama de actions server Actions aqui para manipular algumas açÃĢo por exemplo e eu nÃĢo posso dentro de um componente server vou tirar aqui o botÃĢo tÃĄ vou tirar o Import dele sÃģ para nÃĢo Ficar atrapalhando a gente no vÃdeo Ãģ deixa eu tirar e eu salvar Ãģ quando eu tÃī num componente server eu nÃĢo posso como eu falei para vocÊs ter um botÃĢo entÃĢo por exemplo se eu tivesse aqui um Button e eu colocar aqui por exemplo buscar posts e eu
tentar aqui Ãģ colocar um on Click handle fat posts vou criar uma funçÃĢo aqui por exemplo eu vou criar essa tirar esse console daqui assy function handle fet post entÃĢo criamos uma funçÃĢo normal se eu colocasse aqui Um console P log clicou e eu salvar isso aqui agora olha o que que vai acontecer ele vai falar aqui pra gente que eu nÃĢo posso ter uma reatividade nÃĐ se eu nÃĢo tÃī dentro de um componente client e eu nÃĢo sou porque eu estou dentro de um componente server Mas tem alguma forma da gente fazer isso tem
eu posso chamar um on Click e falar que essa funçÃĢo esse cara aqui ele ÃĐ uma funçÃĢo que executar estado no lado server e nÃĢo dentro do lado client com Isso a gente pode passar uma diretiva aqui dentro da funçÃĢo chamada use server Olha que interessante nÃĐ entÃĢo se eu salvar isso aqui agora ele vai deixar porque isso aqui ÃĐ um comp ÃĐ uma funçÃĢo e que ÃĐ gerada e criada com o nosso US server entÃĢo se eu clicar aqui por exemplo em buscar post ele tem que mostrar um console Olha sÃģ se eu abrir
o nosso inspecionar e eu olhar o nosso console vocÊ percebe que o nosso console que a gente deu nÃĢo aparece aqui no lado Client se eu tÃī no navegador e eu ab inspecionar fui em console Ele nÃĢo tÃĄ aqui cadÊ o nosso console Lembra que eu falei que ele ÃĐ US server EntÃĢo essa funçÃĢo Esse cara ÃĐ chamado no lado servidor entÃĢo por isso que ele funciona e a gente tÃĄ dentro de um server component EntÃĢo olha sÃģ se a gente olhar aqui o nosso CMD vamos vamos lÃĄ embaixo olha aqui ÃĐ o clicko Ãģ
vou ficar clicando vÃĄrias vezes aqui Ãģ cliquei vÃĄrias vezes aqui se a gente olhar olha Um monte de clicko aqui tÃĄ entÃĢo a gente consegue nÃĐ se caso a gente queira fazer alguma server Action A gente pode ter dentro de um componente ser sem nenhum problema tÃĄ entÃĢo isso ÃĐ sensacional atÃĐ dentro de um client a gente consegue dentro do client criar um uma funçÃĢo que tenha use server chamar ela sem nenhum problema tambÃĐm Beleza entÃĢo aqui por exemplo Ãģ eu poderia deixa eu copiar aqui a nossa requisiçÃĢo colocar a nossa requisiçÃĢo http eu vou
colocar aqui um Console pon log nesse nosso data aqui Ãģ data.on posts pra gente ver os posts entÃĢo se eu salvar à vocÊ a gente olhar o nosso CMD nÃĢo tem nada vou clicar aqui em buscar posts vamos ver olha lÃĄ devolver os posts para mim aqui Ãģ olha que legal nÃĐ entÃĢo a gente pode fazer as nossas server Actions e a gente pode tambÃĐm ter formulÃĄrio com Actions server sem nenhum problema por exemplo eu posso ter aqui Ãģ vamos colocar aqui um formulÃĄrio a tag de form dentro da tag De form Eu quero ter
um input vou colocar que ele ÃĐ do tipo Type text ele vai ter um Place holder por exemplo ID do usuÃĄrio e eu quero ter uma entÃĢo uma Class name Border border grade 200 P de2 E aà eu quero ter o nosso Button que vai ser por exemplo buscar usuÃĄrio e eu vou colocar aqui uma Class name BG Blue texto branco e eu vou colocar tambÃĐm que como a gente tÃĄ dentro de uma tag de form se a gente olhar aqui eu posso passar aqui um Type Submit nÃĐ que ÃĐ um tipo submit entÃĢo a
gente criou um formulÃĄrio vou dar aqui pro nosso formulÃĄrio sÃģ para ficar um pouquinho melhor aqui V dar aqui uma Class name FX GAP de do e um MT de4 aqui sÃģ para distanciar tÃĄ um m de 4 aqui para distanciar em cima e embaixo Olha lÃĄ temos aqui nosso carinha nÃĐ maravilha entÃĢo esse nosso formulÃĄrio Se a gente fosse fazendo um react padrÃĢo por exemplo a gente poderia aqui um unsubmit que ÃĐ para submeter um formulÃĄrio por Exemplo a gente pode criar uma outra fun ass function vou chamar essa funçÃĢo aqui por exemplo de
handle search users Maravilha vou falar que essa funçÃĢo ela vai ser executada Ãģ no lado server e vou colocar aqui um console pon log Test e vou pegar essa funçÃĢo e vou passar no nosso on submit se eu salvar isso aqui agora e eu atualizar quando eu vier aqui e eu clicar em buscar ele vai Ele atÃĐ vai funcionar por que que ele vai funcionar Porque mesmo que a gente chama um onsubmit que ÃĐ lÃĄ do client a gente passou que o nosso handle search ele ÃĐ uma componente ele ÃĐ uma funçÃĢo com us server
se eu tirar o US server daqui e eu salvar ele vai dar o erro que a gente nÃĢo pode usar o on submit entÃĢo quando a gente tÃĄ geralmente trabalhando com as Últimas versÃĩes do react e dentro do do Next com server component ÃĐ legal ao invÃĐs de usar o One submit a gente poder usar aqui o a prÃģpria propriedade Chamada Action e para ela eu passar a nossa funçÃĢo handle search user transformar aqui com use server beleza pra gente poder ter acesso a isso e como que eu pego EntÃĢo o que o usuÃĄrio digitou
dentro do input se eu nÃĢo posso ter um US state a gente pode pegar jÃĄ que a gente tÃĄ usando Action A gente pode pegar atravÃĐs da propriedade name entÃĢo por exemplo olha eu quero identificar esse campo como user ID nessa forma aqui Ãģ beleza entÃĢo agora Como ÃĐ que eu pego lÃĄ lÃĄ dentro aqui do nosso handle search como a gente tÃĄ atrelado a uma Action do formulÃĄrio aqui dentro eu posso pegar um item chamado form data dois pontos que ÃĐ do tipo form data e aà eu posso pegar por exemplo conch user ID
igual a form datata pget E aà aqui dentro o parÃĒmetro o seu user ID Vamos colocar aqui o console sÃģ pra gente visualizar salvei aqui vou digitar aqui o id10 por exemplo buscar usuÃĄrio Se eu Olhar aqui Ãģ olha aqui o id10 nÃĐ jÃĄ tÃĄ aqui Ãģ id10 deixa eu atualizar aqui Ãģ colocar aqui Ãģ id5 agora buscar usuÃĄrio Ãģ lÃĄ id5 entÃĢo consigo pegar o que o usuÃĄrio digitou com essa forma olha que massa sem ter a reatividade por exemplo eu posso fazer uma requisiçÃĢo http deixa eu pegar aqui Ãģ depois que eu pegar
o ID fazer uma requisiçÃĢo essa api ela tem uma Ela tambÃĐm tem uma rota barra posts bar user eu vou transformar aqui com o nosso Cras com o nosso template string nÃĐ aquelas pinhas dadas barra cifrÃĢo abre fecha os Chaves eu V vou passar o ID do usuÃĄrio aqui Ãģ ele vai trazer os posts desse usuÃĄrio Vou colocar aqui um console nessa propriedade data entÃĢo se eu salvar isso aqui agora e eu atualizar isso aqui eu vou tentar procurar Sei lÃĄ o id5 buscar usuÃĄrio vamos ver olha lÃĄ o ID 5 do user ID ele
tem dois posts nÃĐ dois posts aqui olha que legal nÃĐ entÃĢo a gente consegue ter tambÃĐm inputs Buscar algo sem a necessidade de ter um US state de ter a reatividade dependendo o caso de uso que vocÊ quer entÃĢo uma coisa legal que o server component Traz essa praticidade da gente fazer aqui tanto comunicar com uma API quanto se vocÊ tivesse um banco de dados atrelado aqui o seu o projeto next jÃĄ chamar ele aqui dentro do componente sem nenhum problema tÃĄ e a gente pode ter Ãģ toda a parte tambÃĐm de criar server actions
dentro de um componente ou atÃĐ acessar Um input atravÃĐs da nossa Action com o server Action aqui muito massa entÃĢo a gente falando aqui sobre server component e Client component server Actions e agora como que a gente consegue ter rotas dinÃĒmica dentro da nossa aplicaçÃĢo por exemplo eu quero acessar esse post aqui posts bar id1 por exemplo como que a gente faz isso entÃĢo aqui dentro como a gente tem rotas na nossa aplicaçÃĢo eu vou vir aqui dentro do posts eu quero que seja barra posts Barra ID entÃĢo barra posts que ÃĐ aqui dentro nÃĐ
onde tem a page vou criar mais uma page aqui dentro abro o coet e vou chamar de ID que ÃĐ o nome do parÃĒmetro EntÃĢo dentro do posts eu criei uma pasta com o colchete ID entÃĢo falando isso ÃĐ dinÃĒmico e dentro dessa pasta New file page.ts E aà eu posso criar aqui Export default function vou chamar aqui de detail post return E aà aqui dentro uma div um H1 aqui detail do po EntÃĢo como ÃĐ que eu acesso essa pÃĄgina aqui agora Como a gente falou que ÃĐ um ID dentro de barra posts Ã
Barra posts E aà o ID entÃĢo barra posts barra Opa barra1 por exemplo Ãģ se eu acessar Olha lÃĄ detalhe do post Olha que legal nÃĐ E como ÃĐ que eu pego o ID que vocÊ me mandou lÃĄ da Rota a gente recebe atravÃĐs de propriedade entÃĢo eu posso pegar aqui dentro desse nosso barra posts aqui atravÃĐs de propriedad entÃĢo Pego aqui Ãģ abre e fecha Chaves vou dar aqui um eu recebo parms Opa parms aqui depois da Chave dois pontos abre e fecha o Chaves novamente sÃģ pra gente criar tipagem do typescript parms dois
pontos abre e fecho aqui ou vou colocar direto Ãģ parms ele ÃĐ do tipo Promise abre fecho sinalzinho de mar menor com abre e fecha Chaves Qual que ÃĐ o nome que eu dei eu falei que ÃĐ um ID entÃĢo ID string Beleza entÃĢo a gente recebe uma propriedade parms que dentro nÃĐ ele ele ÃĐ como uma Promise e lÃĄ dentro tem um ID EntÃĢo como que eu recebo isso aqui dentro do Componente con igual a parms aqui e eu posso pegar aqui dentro o ID E lembra que eu falei que isso aqui ÃĐ uma
Promise entÃĢo eu tenho que usar aqui o await pra gente usar o await no componente eu preciso transformar o nosso componente aqui assim function que a gente jÃĄ conheceu entÃĢo se eu salvar e agora eu quero colocar aqui Ãģ detalhes do post dois pontos abre e fecho aqui e vou passar o nosso ID aqui pra gente visualizar salvei Olha lÃĄ detalhes do Post 10 se eu acessar post 35 Ãģ detalhes do post 35 muito legal nÃĐ entÃĢo a gente jÃĄ consegue acessar essa pÃĄgina dinÃĒmica e fazer requisiçÃĢo por exemplo ÃĐ essa URL aqui da pi
acho que ela tem tambÃĐm eu vou copiar aqui essa URL api vou vou atÃĐ dar um Export aqui Ãģ Nessa post props Export Vou salvar aqui e a gente pode vir aqui no detalhe da pi depois que ele buscar eu quero fazer uma requisiçÃĢo para buscar os detalhes do post com esse ID entÃĢo vou passar aqui o ID sÃģ que vai mudar um pouquinho acho que a rota nÃĐ a rota aqui vai ser na verdade barra posts barra e aà o ID beleza e aà aqui eu vou trazer apenas o nosso post props ele jÃĄ
vem as props do item e agora eu quero exibir aqui embaixo entÃĢo por exemplo eu quero exibir o data ponto eh colocar dentro da do do H1 aqui H2 Ãģ data.on Tile vou duplicar aqui vou colocar dentro de um parÃĄgrafo aqui o data.on body colocar um parÃĄgrafo aqui vou salvar isso aqui Agora salvei se a gente olhar aqui Ãģ post 35 Ãģ tem um post 35 por algum motivo tem um post 35 entÃĢo Ãģ jÃĄ buscou os detalhes dele Olha que legal nÃĐ e dentro do posts aqui Ãģ a gente pode colocar atÃĐ um linkzinho
para ele Navegar pro ID desse post aqui Ãģ entÃĢo por exemplo dentro lÃĄ do nosso barra posts page que ÃĐ onde a gente lista todos os posts aqui Ãģ posso colocar aqui nossa tag de link Ãģ vou dar um Tab aqui do Next ele vai importar aqui do Next Bar link e aà a gente pode fazer olha ver detalhes desse post ou acessar acessar detalhes e o link eu quero que seja HF abre e fecha os Chaves aqui abra aqui o nosso crase barra posts que ÃĐ a nossa rota nÃĐ barra posts barra cifrÃĢo abre
fecha os Chaves post pid para navegar EntÃĢo paraa nossa pÃĄgina barra posts bar oid que do post que VocÊ clicou entÃĢo se eu salvar deixa eu colocar aqui um uma corzinha Class colocar aqui um text traço Blue 500 Olha LÃĄ vou clicar por exemplo nessa aqui Ãģ Don Dave wasn't entÃĢo vou clicar aqui Ãģ cliquei Olha lÃĄ barra posts bar 6 e olha lÃĄ detalhe do post 6 e jÃĄ tÃĄ aqui os detalhes desse post E olha que legal nÃĐ entÃĢo isso ÃĐ muito massa que a gente pode fazer uma pÃĄgina de forma dinÃĒmica dessa
forma aqui onde a gente consegue pegar entÃĢo o parÃĒmetro que eu chamei de ID se vocÊ tivesse chamado aqui por exemplo com outro nome seria o nome que vocÊ vai receber aqui como eu chamei de ID entÃĢo eu recebo ele atravÃĐs desse nome ID a gente espera o parÃĒmetro chegar e aà eu posso por exemplo fazer uma requisiçÃĢo como a gente tÃĄ no lado server posso jÃĄ fazer a requisiçÃĢo Sem problema entÃĢo voltando aqui pro nosso guia nÃĐ de rotas dinÃĒmicas que a gente aprendeu Como criar uma rota dinÃĒmica show de bola e agora a
gente vai falar sobre um assunto muito importante quando a gente tÃĄ criando um componente que ele ÃĐ um componente server que a gente pode Fazer streaming aqui dentro ou seja a gente tem um componente server aqui por exemplo para buscar os detalhes de um post Mas e se esse essa essa api demorar para me responder que que vai acontecer entÃĢo por exemplo ÃĐ Vou colocar aqui em cima do nosso fat vou dar aqui um conche ou vou dar sÃģ um await direto Ãģ New Promise resolve ele vai dar um resolve quando nÃĢo tiver um set
time out Vou colocar aqui por exemplo que quando o o time out acabar ele vai chamar o resolve E eu vou colocar aqui que ele vai demorar 4 Segundos para acontecer entÃĢo como a gente tÃĄ usando no await ele sÃģ vai fazer a requisiçÃĢo E aà devolver aqui visualmente pro usuÃĄrio quando ele acabar isso aqui entÃĢo primeiro ele vai ter que passar aqui vai demorar quatro segundos para passar entÃĢo sÃģ para simular como se a pi tivesse lenta e olha o que que acontece se eu pegar aqui Ãģ vou copiar vou fechar e vou tentar
abrir Ãģ vou dar um enter olha sÃģ tÃĄ Bloqueado entÃĢo a gente bloqueia o acesso basicamente porque ele tÃĄ passando pelo server Ãģ e aà quando acabar ele devolve entÃĢo acontece que à s vezes vocÊ tem que tomar cuidado se vocÊ tÃĄ construindo algo que realmente VocÊ viu como acaba com a experiÊncia do usuÃĄrio isso entÃĢo Caso seja algo que realmente vocÊ precisa ou que nÃĐ Tenha ali um controle que nÃĢo vai demorar entÃĢo nÃĢo tem nenhum problema mas quando a gente faz isso vocÊ acaba acabando e e Acabando um pouquinho com a experiÊncia e ficando
bloqueado a gente pode fazer de duas formas para melhorar essa experiÊncia pro usuÃĄrio com o Next entÃĢo a gente pode por exemplo vir aqui dentro da nossa aplicaçÃĢo e eu posso como a gente tÃĄ dentro da Rota bar posts barid Ãģ EntÃĢo dentro da Rota do ID que eu coloquei isso aqui nÃĐ coloquei aqui dentro da Rota dinÃĒmica eu posso vir dentro dela New file criar um arquivo chamado loading loading ptsx e a partir Da hora que a gente cria esse cara aqui eu preciso dar um Export default function loading E aà retornar alguma coisa
poderia ser com um componente indicando por exemplo um H1 carregando nÃĐ algum componente com alguma animaçÃĢo alguma coisa entÃĢo beleza salvei isso aqui agora esse cara aqui vai acontecer que ele vai entrar em AçÃĢo quando esse componente demorar ali tiver carregando lÃĄ entÃĢo se eu der um cont control F5 Ãģ percebe que tÃĄ carregando e aà quando Acabar o resto que nÃĢo fazia parte desse cara desse componente como o nosso layout que nÃĢo tinha nada para ser carregado vocÊ percebe que ele jÃĄ tava renderizado Ãģ vou copiar vou abrir de novo Ãģ abri Ãģ o
layout tÃĄ carregado e aqui tÃĄ carregando entÃĢo todo o nosso componente enquanto ele nÃĢo ÃĐ carregado ele vai mostrar o componente que a gente colocou de loading olha que massa nÃĐ de forma massa aqui Ãģ Simples entÃĢo por exemplo Vou acessar aqui posts Vou Acessar um detalhe aqui Ãģ acessei os detalhes Ãģ carrega carregando e perfeito atÃĐ ele carregar nÃĐ a gente colocou 4 Segundos entÃĢo a gente pode fazer dessa forma como a gente pode colocar essa essa parte de de streaming basicamente para vocÊ sinalizar onde que tÃĄ carregando apenas no local tambÃĐm e nÃĢo
no componente inteiro se vocÊ quiser como que a gente poderia fazer isso entÃĢo para a gente entender eu vou vir aqui no nosso loading sÃģ para ele parar De funcionar vou renomear ele aqui vou colocar um underline na frente sÃģ para ele parar de funcional se eu dar um F5 agora a gente bloqueou de novo nÃĐ como eu coloquei o underline EntÃĢo como que a gente pode fazer isso aqui dentro a gente vai mover para um componente entÃĢo por exemplo dentro aqui do nosso ID eu vou criar uma nova pasta underline components e dentro dela
New file eu vou chamar aqui ela aqui de por exemplo post ptsx tÃĄ entÃĢo criamos aqui Export Default function nÃĢo precisa do default aqui Ãģ Export function vai se chamar aqui vou chamar aqui de post info beleza Esse vai ser o nome aqui do componente return show de bola E aà aqui dentro Eu quero trazer por exemplo a parte do componente essa partezinha aqui do do nosso componente Ãģ ÃĐ o uma div E aà aqui dentro vai aparecer o tÃtulo e o body e eu vou trazer essa requisiçÃĢo e o nosso Promise aqui para dentro
desse componente vouer trazer aqui para dentro Export vou colocar assn function para ele fazer essa requisiçÃĢo Vou importar aqui o nosso post props portar aqui beleza entÃĢo aqui a gente tem o nosso componente salvei aqui e agora lÃĄ no nosso componente aqui eu vou tirar essa parte aqui e agora a gente vai chamar aqui o nosso post info vou dar um aqui Maravilha importou aqui o componente e claro nÃĐ a gente precisa receber o ID aqui como propriedade EntÃĢo nesse componente abro aqui recebemos o id o id Dois pontos e string aqui beleza entÃĢo a
gente recebe o ID como propriedade e faz a requisiçÃĢo e aqui entÃĢo a gente precisa passar esse id o id a gente recebe a URL nÃĐ entÃĢo Passamos o ID para lÃĄ entÃĢo agora a gente sÃģ criou aqui dentro da nossa pÃĄgina criamos um componente chamado post e lÃĄ dentro ele faz a requisiçÃĢo http ele ÃĐ um componente server nÃĐ entÃĢo ele faz a requisiçÃĢo http e beleza e depois exibe aqui show de bola e a gente colocou aqui O delay de 4 Segundos para simular que ela demora entÃĢo salvei por enquanto Ãģ continua a
mesma coisa Ãģ bloqueando ali Ãģ deu um F5 ele começa continua bloqueando como ÃĐ que a gente faz para ter aquele streaming apenas aonde ÃĐ o post por exemplo onde que tÃĄ sendo a requisiçÃĢo apenas aqui vocÊ percebe que aqui no nosso H1 Ãģ text 4xl fonte traço bold Ãģ percebe que deixa atualizar aqui de novo Ãģ que ele nÃĢo tem nada ÃĐ aqui embaixo que a requisiçÃĢo ÃĐ feita tÃĄ EntÃĢo o que a gente vai fazer ÃĐ em volta do componente a gente vai usar um carinha do react chamado suspense EntÃĢo vou dar um
Tab aqui dentro vai o componente que ÃĐ o componente que a gente faz a requisiçÃĢo que pode demorar em volta vai o nosso suspense e aqui dentro a gente tem uma propriedade chamada fallback o fallback aqui basicamente a gente pode passar o componente que vocÊ quer aqui dentro que seja renderizado enquanto isso aqui tÃĄ Carregando entÃĢo se eu salvar isso aqui agora olha lÃĄ e eu atualizar vocÊ percebe que tÃĄ lÃĄ carregando que ÃĐ o que a gente colocou e aonde nÃĢo ÃĐ a parte do load EntÃĢo nossa pÃĄgina aqui Ãģ tem o H1 que
ÃĐ o detalhes aqui eu vou dar aqui atÃĐ um text traço Center text traço Center vou dar um enter aqui Ãģ salvei e eu vou atualizar à vocÊ percebe que ele jÃĄ tÃĄ aqui Ãģ sÃģ a parte de baixo que ÃĐ onde tem o nosso post info que tÃĄ carregando lÃĄ olha que Legal nÃĐ entÃĢo sÃģ essa parte aqui entÃĢo quando a gente tem um loading demorado a gente pode usar dessas duas alternativas ou usar o loading que a gente mostrou sÃģ que daà toda a pÃĄgina entra no load ou vocÊ pode usar o suspense
e dentro renderizar o componente que faz a requisiçÃĢo por exemplo que busca lÃĄ que pode demorar E aà enquanto ele tÃĄ carregando ele vai executar ou seja vai renderizar o que a gente passar dentro do fallback entÃĢo isso a gente tem aqui Dentro do nosso next como streaming nÃĐ se a gente procurar aqui Ãģ por streaming a gente vai ver aqui Ãģ loading e and streaming entÃĢo a gente pode ter a nossa pÃĄgina renderizada e dentro essa parte azul por exemplo que busca alguma coisa dinÃĒmica que caso demore vocÊ pode colocar esse fallback entÃĢo sÃģ
aquela parte ali mostra carregando ou vocÊ pode usar na pÃĄgina inteira criando nÃĐ um arquivo loading aqui e aà quando tiver carregando ele vai mostrar esse loading Aqui no lugar Beleza entÃĢo sÃĢo duas alternativas que a gente pode fazer lidando com isso aqui usando esse caso de uso aqui caso demore nÃĐ entÃĢo sÃģ pra gente ver bem quando estÃĄ carregando o que que vai vai ser renderizado e nÃĢo bloqueia o acesso EntÃĢo se o usuÃĄrio acessar aqui Ãģ e a internet tiver lenta aqui ele ÃĐ mostrado porque isso aqui ÃĐ ÃĐ do server component agora
aqui que tava carregando ele mostra ali o efeito carregando ou o componente que vocÊ Colocar Beleza entÃĢo se a gente voltar aqui Ãģ a gente tambÃĐm falou sobre loading ui and e streaming nÃĐ entÃĢo a gente falou sobre loading ui and streaming e outra coisa que a gente tem muito dentro do Next aqui ÃĐ revalidate e caching entÃĢo por padrÃĢo quando a gente faz uma requisiçÃĢo http com por exemplo aqui vamos no nosso barra posts aqui Ãģ posts e page aqui a gente busca todos os posts certo eu vou Minimizar aqui as funçÃĢo zinha aqui
a gente busca todos os Posts e depois exibe nÃĐ a nossa lista de post aqui embaixo Beleza entÃĢo aqui dentro quando a gente faz uma requisiçÃĢo usando fat a gente tem acesso a algumas propriedades se a gente olhar aqui dentro Ãģ do Nossa propriedade aqui Ãģ data fetting data fetch and caching a gente pode quando faz um fatch tem acesso aqui Ãģ ao Cash Deixa eu ver se eu acho aqui de forma rÃĄpida pra gente a gente pode passar algumas propriedades para o nosso Fat como Cash e a gente tem algumas propriedades aqui dentro que
a gente pode passar entÃĢo aqui dentro Ãģ se a gente olhar aqui Deixa eu procurar aqui que fica mais fÃĄcil Ãģ Force Cash Force Cash deixa eu ver aqui Cash acho que ÃĐ aqui for cas aqui Ãģ aqui entÃĢo dentro do nosso fat a gente pode passar algumas propriedades como o Cash e dentro do Cash se a gente ver por padrÃĢo o exemplo a gente tÃĄ fazendo uma requisiçÃĢo aqui que a gente nÃĢo tÃĄ Passando nada entÃĢo por padrÃĢo no next 15 que ÃĐ o atual que a gente tem hoje em dia por padrÃĢo ele
vai colocar aqui como no Store ou seja ele vai colocar toda vez que vocÊ fazer uma requisiçÃĢo vou atÃĐ traduzir para vocÊs ele vai buscar da api algo dinÃĒmico nÃĐ entÃĢo o Next busca toda vez o servidor cada solicitaçÃĢo que vocÊ fazer entÃĢo nÃĢo tem Cash nessa requisiçÃĢo mas ah Mateus eu quero que como ÃĐ que vocÊ pode fazer VocÊ pode vocÊ pode vir aqui no seu fat Passar aqui uma vÃrgul Zinha abre e fecha Chaves e vocÊ passar aqui a o parÃĒmetro cche e vocÊ colocar aqui por exemplo que vocÊ quer um Force Cash
EntÃĢo dessa forma vocÊ vai falar que vocÊ quer um Cash para essa requisiçÃĢo quando vocÊ for fazer E alÃĐm disso VocÊ pode passar aqui next dois pontos abre e fecha os Chaves e pode passar uma propriedade revalidate que ÃĐ quando enquanto tempo vai acontecer essa revalidaçÃĢo de dados dessa chamada aqui EntÃĢo por exemplo eu coloquei 60 segundos aqui certo que ÃĐ em segundos aqui se o usuÃĄrio acessar a sua pÃĄgina ele vai fazer a requisiçÃĢo e vai renderizar lÃĄ os dados se a gente acessar esses dados aqui antes que passe 60 segundos ele vai pegar
do Cash e nÃĢo vai fazer uma nova solicitaçÃĢo pro servidor para fazer uma nova requisiçÃĢo http entÃĢo ele usa essa revalidaçÃĢo com isso a gente ganha muito mais performance nÃĐ em muitas rotas que vocÊ NÃĢo quer que tenha ÃĢ algo que seja dinÃĒmico totalmente nÃĐ Para que buscar toda hora da requisiçÃĢo se ÃĐ uma rota que nÃĢo tem muitos dados que vÃĢo mudar toda hora entÃĢo vocÊ pode fazer uma revalidaçÃĢo vocÊ pode fazer um Force cash ou vocÊ pode fazer um revalidate passando Sei lÃĄ acho que 3.600 ÃĐ uma hora por exemplo Ah eu quero
que de 1 em uma hora ele vai buscar os dados atualizados lÃĄ da api senÃĢo ele vai usar os dados que ele tem em cash entÃĢo a Gente pode fazer isso lembrando por padrÃĢo atualmente ele vem como no Store entÃĢo ele vem eh como Toda vez que vocÊ entrar no site nÃĐ ele vai buscar lÃĄ da api agora se vocÊ usar um Force Cash e ainda passar um revalidate ele vai fazer um Cash primeira vez que vocÊ acessar e se vocÊ acessar de novo antes do tempo do Cash ele vai usar o Cash aà e
depois sÃģ que acabar esse tempo de revalidate aà ele faz uma nova solicitaçÃĢo tÃĄ isso ÃĐ muito importante a gente entender EntÃĢo isso a gente pode usar em requisiçÃĩes aqui mas tambÃĐm a gente pode usar dentro de componentes ou revalidate porque toda vez que a gente cria um componente por exemplo na nossa pÃĄgina home no next quando eu crio um componente criamos aqui o nosso home ele gera esse componente um componente server ele gera um componente estÃĄtico ou seja se a gente olhar aqui Ãģ e eu criar um JavaScript Ãģ con Random Number igual math
P Random vou gerar aqui um Vezes 10 entÃĢo ele vai gerar um nÚmero de 0 a 10 ali tÃĄ e eu vou colocar aqui Ãģ colocar aqui em cima aqui Ãģ e colocar embaixo Aqui Ãģ H2 nÚmero gerado e eu vou colocar aqui o nosso Random Number entÃĢo colocamos na home se eu acessar minha pÃĄgina home aqui Ãģ vocÊ vai ver que ele gerou nÚmero Ãģ se eu atualizar ele vai ficar deixa eu dar um zoom para vocÊs Ãģ ele vai ficar gerando o nÚmero sÃģ que a gente tÃĄ em desenvolvimento sÃģ que como eu
nÃĢo Passei nenhum revalidate ÃĐ sÃģ um componente server que eu nÃĢo passei nenhum revalidate entÃĢo esse componente quando a gente gerar o build da nossa aplicaçÃĢo esse componente essa pÃĄgina vai ser gerada de forma estÃĄtica o que que isso quer dizer olha sÃģ se eu salvar tÃĄ vendo que ele gera toda vez mas se ele for gerado de de forma estÃĄtica ele vai gerar a primeira vez que o usuÃĄrio acessar depois ele nÃĢo vai gerar mais vai ficar sÃģ aquela pÃĄgina lÃĄ entÃĢo a Gente tem que tomar cuidado com os casos de uso entÃĢo sÃģ
para vocÊ ver na prÃĄtica antes da gente aplicar o revalidate se eu salvar isso aqui e eu voltar na minha aplicaçÃĢo Ãģ eu D npm Run build vamos gerar o build da aplicaçÃĢo como se a gente tivesse gerando o Build para publicar entÃĢo ele vai gerar o build vamos lÃĄ beleza TÃĄ gerando as pÃĄginas aà e vocÊ percebe Ãģ aqui ele fala tÃĄ quando tem a bolinha sÃĢo pÃĄginas que sÃĢo geradas prÃĐ renderizadas estÃĄticas o ConteÚdo quando tem o f que sÃĢo pÃĄginas e com server rendering nÃĐ ou seja sÃĢo renderizados sobre demanda sÃĢo pÃĄginas
dinÃĒmicas tÃĄ entÃĢo a gente tem por exemplo post aqui Ãģ aquele post barid sÃĢo vÃĄrios posts sÃĢo renderizados de forma dinÃĒmica nÃĐ porque cada ID ÃĐ um post entÃĢo ele sempre vai ser de forma dinÃĒmica o Barra post a gente nÃĢo Ãģ tÃĄ vendo o nosso home que ÃĐ a bolinha aqui Ãģ ele tÃĄ com uma bolinha tambÃĐm entÃĢo ÃĐ apenas uma Única vez vamos rodar o nosso Projeto ÃĐ como se tivesse sem sem desenvolvimento entÃĢo npm Run start aqui Ãģ olha como ÃĐ que ele vai se comportar vamos lÃĄ beleza rodou vou vir aqui
vou dar um F5 nÃĐ entÃĢo agora tÃĄ rodando nÃĢo movimento mas sim como se tivesse em produçÃĢo entÃĢo atualizei vocÊ percebe Ãģ que eu tÃī atualizando ele gerou um nÚmero mas Ãģ Ãģ o nÚmero aqui Ãģ nÃĢo atualiza mais porque a primeira vez que ele gerou o build ele gerou essa pÃĄgina estÃĄtica EntÃĢo a primeira vez que ÃĐ Gerado ele gerou lÃĄ o nÚmero lÃĄ e ele nÃĢo ÃĐ mais regerado isso aqui por quÊ Porque ÃĐ um conteÚdo gerado de forma estÃĄtica EntÃĢo a gente tem ÃĐ uma pÃĄgina gerada de forma estÃĄtica tem muuitas das
vezes que a gente quer gerar de fato uma pÃĄgina no nosso projeto que eu quero que seja estÃĄtica nÃĢo tem necessidade de ficar alterando EntÃĢo vocÊ ganha muito mais performance eh do que toda vez que o usuÃĄrio acessar tem que buscar Dapi ou fazer alguma coisa ou vocÊ quer buscar Uma Única vez e depois que buscou ele gera a pÃĄgina estÃĄtica Beleza entÃĢo essa ÃĐ uma forma sÃģ que no meu caso vamos supor que eu nÃĢo queria eu queria que a cada 60 segundos tivesse uma revalidaçÃĢo EntÃĢo se o usuÃĄrio acessou primeira vez ele gera
a pÃĄgina e qualquer usuÃĄrio que acessar antes dessas 60 segundos aà ele usaria aquele nosso Cash caso o usuÃĄrio aquela pÃĄgina caso o usuÃĄrio acesse apÃģs o tempo que a gente especificar aà ele Gere novamente o uma nova pÃĄgina como ÃĐ Que a gente faz isso entÃĢo com isso a gente pode usar os revalidate EntÃĢo posso vir por exemplo na nossa pÃĄgina vamos supor que eu quero aqui na pÃĄgina home eu vou vir aqui em cima da pÃĄgina e eu vou dar aqui um Export conche revalidate e eu passo aqui quantos segundos vou colocar aqui
por exemplo 60 nÃĐ 60 segundos vou salvar isso aqui entÃĢo colocamos isso na pÃĄgina home vou voltar aqui agora e eu vou dar um Ctrl C temos que gerar um build novamente npm Run build tÃĄ ele vai gerar todo o build gerar os build das pÃĄginas todas novamente Ãģ gerando aqui vamos aguardar entÃĢo olha sÃģ ele tÃĄ aqui ele tÃĄ aqui como prÃĐ renderizado estÃĄtico o conteÚdo sÃģ que agora a gente colocou um revalidate EntÃĢo vamos lÃĄ vamos girar o npm Run start novamente pra gente rodar como se fosse uçÃĢo nÃĐ Beleza vou vir aqui
Ãģ presta atençÃĢo eu vou vir aqui e vou dar um F5 Ãģ vou dar um F5 Ãģ gerou aqui se eu der F5 de novo Ãģ percebe que Ele nÃĢo tÃĄ atualizando eu vou esperar passar 60 segundos aqui na mÃĄgica aqui do da ediçÃĢo vou esperar passar 60 segundos e eu volto Eu acho que jÃĄ passou 60 segundos aqui eu vou dar aqui um control F5 opa olha o que que aconteceu agora vocÊ viu que ele gerou novamente o outro nÚmero agora e seu df5 Ãģ ele nÃĢo tÃĄ gerando novamente entÃĢo ele gera estÃĄtico ele
gera a pÃĄgina depois qualquer pessoa que acessar antes daquele tempo que a gente especificou Que no caso foi 60 segundos ele vai usar aquela pÃĄgina lÃĄ entÃĢo ele ganha muita performance se vocÊ tiver massivamente vÃĄrios usuÃĄrios acessando vocÊ reduz bastante a carga porque ele vai usar essa pÃĄgina aqui e aà quando passar 60 segundos ele vai gerar uma nova e as pessoas vÃĢo pegar Ãģ passou 60 de novo e as pessoas vÃĢo pegar essa nova pÃĄgina aà o que ÃĐ muito legal que vocÊ ganha bastante performance aà para poder caso vocÊ nÃĢo queira que seja
uma pÃĄgina EstÃĄtica vocÊ passa entÃĢo um Export revalidate entÃĢo a gente aprendeu que na pÃĄgina se vocÊ criar uma pÃĄgina server component e nÃĢo passar um revalidate ele vai gerar aquilo lÃĄ como estÃĄtico uma Única vez e nÃĢo vai ter alteraçÃĢo de dados tÃĄ a nÃĢo ser que dentro dessa pÃĄgina vocÊ tenha um componente eh Client que tenha US state que tem alguma coisa que daà aquilo lÃĄ ÃĐ reativo mas uma uma pÃĄgina que sÃĢo server ela fica estÃĄtica agora se vocÊ tem por exemplo Uma pÃĄgina que ÃĐ server mas passa um revalidate ela vai
ter de tempo em tempo que vocÊ passou essa revalidaçÃĢo de dados tÃĄ entÃĢo isso ÃĐ muito legal por exemplo aqui na nossa pÃĄgina de posts concorda entÃĢo por exemplo aqui a gente colocou jÃĄ um Force Cash e um revalidate de 3600 segundos nÃĐ Ã se fosse por exemplo 60 segundos aqui aqui nessa pÃĄgina vocÊ tambÃĐm pode passar por exemplo Export conche revalidate no componente na pÃĄgina de 60 segundos EntÃĢo alÃĐm da requisiçÃĢo que ÃĐ uma coisa a gente tÃĄ passando aqui no componente tambÃĐm e o que ÃĐ muito interessante Porque pensa que tem 1000 pessoas
acessando o seu site entÃĢo ele vai gerar ali enquanto nÃĢo passar esse tempo ele vai usar essa essa essa pÃĄgina depois de 60 segundos ele vai gerar uma nova EntÃĢo vocÊ ganha bastante e performance nisso aà tÃĄ evitando que cada vez que uma pessoa acesse vocÊ tenha que lÃĄ e busque novamente renderize novamente entÃĢo Muito mais processamento aà entÃĢo uma coisa muito legal que next traz pra gente entÃĢo jÃĄ fechando aqui a nossa parte de revalidate cashing e Cash fat que a gente jÃĄ viu aqui tambÃĐm que a gente pode passar o force Cash passar
aqui tambÃĐm ÃĐ o Next com revalidate ou passar se vocÊ nÃĢo quer quero fazer uma requisiçÃĢo que eu nÃĢo quero que tenha Cash aà vocÊ tira esse next revalidate e coloca aqui nÃĐ que jÃĄ ÃĐ o padrÃĢo hoje em dia que ÃĐ o no cash Beleza entÃĢo vou Deixar aqui como exemplo para vocÊs entÃĢo aqui eu coloquei AtÃĐ outro exemplo que ÃĐ muito bacana de como que isso acontece nÃĐ dentro da requisiçÃĢo http EntÃĢo quando vocÊ faz uma requisiçÃĢo http por exemplo um fet e vocÊ colocou um revalidate de 60 segundos e nÃĢo existia nenhum
Cash ele vai lÃĄ busca do Servidor devolve pro usuÃĄrio perfeito agora se vocÊ fazer novamente antes dos 60 segundos ele vai falar olha temos o Cash EntÃĢo jÃĄ devolve pro usuÃĄrio ele NÃĢo faz uma requisiçÃĢo lÃĄ e pega os dados do Servidor isso ÃĐ muito interessante tÃĄ agora nÃĐ se fazer de novo e ele fala Opa jÃĄ preciso aqui jÃĄ passou o tempo dos 60 segundos entÃĢo ele vai falar vamos fazer um revalidate ele vai buscar lÃĄ do Servidor E aà nÃĐ fazer a requisiçÃĢo e vai devolver entÃĢo aà pro nosso data Cash e que
devolve pro usuÃĄrio EntÃĢo isso ÃĐ muito legal tÃĄ se precisar de revalidate entÃĢo sÃģ uma forma mais visual que tem dentro da PrÃģpria documentaçÃĢo eh do Next tÃĄ E aà faltou duas partes pra gente encerrar isso aqui que tÃĄ cara sensacional que ÃĐ mws E H handlers EntÃĢo vamos falar sobre mws a gente pode ter mws dentro do nextjs para que que a gente pode usar por exemplo quando vocÊ acessar alguma rota ou todas as rotas vocÊ fazer alguma coisa fazer uma verificaçÃĢo trabalhar aà por exemplo para bloquear uma rota VocÊ pode ter por exemplo
no nossa casa a no nosso caso a gente tem a rota de Dashboard vamos supor que eu sÃģ quero que o usuÃĄrio logado possa acessar o dashboard como ÃĐ que a gente poderia nÃĐ entÃĢo para isso a gente pode por exemplo dentro do src criar um New file chamado middleware PTS tÃĄ nÃĢo ÃĐ tsx por quÊ Porque isso aqui nÃĢo ÃĐ um componente tÃĄ entÃĢo middleware cuidado na escrita aà tambÃĐm e aqui a gente pode criar o nosso middleware Export function middleware aqui a gente recebe o request tÃĄ deixa ele completar aqui mas a gente
vai Melhorar um pouquinho isso aqui vou dar um control espaço para ele importar aqui do Next bar server e aqui dentro a gente pode fazer algumas coisas por exemplo conch vou chamar de authenticated igual falso por exemplo simulando que vocÊ nÃĢo tÃĄ autenticado aqui poderia atÃĐ fazer uma requisiçÃĢo http buscar do cook para validar o token entÃĢo no caso vou deixar aqui falso como se vocÊ nÃĢo tivesse logado e eu posso fazer de uma forma bem simples aqui Ãģ se VocÊ acessar por exemplo a rota apenas barra dashboard e nÃĢo tiver logado eu quero que
redirecione pra Barra home por exemplo entÃĢo eu vou ver aqui se vocÊ request request ponto aqui eu vou mudar esse Import aqui do request eu vou chamar de Next request aqui Ãģ vou mudar o Import aqui e aà request P next URL PP name pstw ou seja se a sua rota que vocÊ tÃĄ acessando ela começa com barra dashboard se ela começa com barra dashboard e vocÊ nÃĢo tÃĄ entÃĢo exclamaçÃĢo Autenticado eu vou fazer o quÊ eu vou dar um return next response P redirect New URL com URL tudo maiÚsculo eu vou redirecionar vocÊ para
o Barra que seria a nossa pÃĄgina de home E aà eu preciso passar aqui vÃrgula o request.url atual tÃĄ entÃĢo dessa forma se vocÊ acessar qualquer rota que comece com barra dashboard ele e nÃĢo tiver autenticado ele vai redirecionar vocÊ lÃĄ pro home agora caso vocÊ esteja autenticado e vocÊ acesse isso ele ele vai deixar aqui Ele vai cair para baixo porque ele vai pular o if porque vocÊ tÃĄ autenticado e vai dar um next response PN Como ÃĐ o middleware ele tÃĄ no meio ali ele vai apenas Ãģ deixa seguir o fluxo aà apenas
isso que acontece EntÃĢo vou salvar isso aqui agora e a gente voltar aqui para testar deixa eu sÃģ vir aqui e eu vou parar de rodar e a gente vai rodar em desenvolvimento nÃĐ npm Run Dev novamente vamos rodar desenvolvimento que a gente estava rodando lÃĄ para testar entÃĢo Rodando em desenvolvimento vou tentar acessar o dashboard agora vamos ver aqui deixa ele tÃĄ compilando lÃĄ Ãģ nÃĢo deixou eu acessar se eu acessar de novo Ãģ barra dashboard Ãģ nÃĢo deixou eu acessar entÃĢo eu nÃĢo consigo nem acessar aqui Ãģ o Barra dashboard se a gente
colocar aqui Ãģ console.log acesso negado sÃģ pra gente vir no servidor Ãģ salvar Se eu tentar acessar aqui barra dashboard vou dar um enter nÃĢo deixou acessar redirecionou para Home se a gente olhar aqui Ãģ acesso negado Olha que legal nÃĐ agora se vocÊ tivesse logado vou mudar aqui o authenticated para true supondo que eu estou logado e que eu tÃī tentando acessar o dashboard aà ele tem que pular o if e tem que deixar eu seguir entÃĢo se eu acessar aqui Ãģ barra dashboard Olha lÃĄ consigo acessar o nosso barra dashboard agora sem nenhum
problema Beleza entÃĢo uma forma bem simples aqui mas na documentaçÃĢo tambÃĐm tem atÃĐ mais Exemplos aqui que a gente pode e evoluir esse midware para coisas bem mais complexas igual a gente faz dentro do curso nÃĐ todo fluxo aqui com uma API que tem o token jwt usando cookies tambÃĐm tÃĄ entÃĢo alÃĐm do mids a gente pode ter dentro do nosso Next O backend dentro entÃĢo posso criar api routes ou seja seja rotas api dentro do prÃģprio next entÃĢo por exemplo a gente pode vir aqui dentro do app criar uma nova pasta chamada api e
dentro dela por exemplo eu Quero criar uma rota chamada nova pasta chamada info por exemplo e dentro dela New file chamado h. TS tÃĄ entÃĢo vou criar uma rota aqui Export assn function get o get tem que ser tudo maiÚsculo ÃĐ vamos criar uma rota do tipo get return eu quero devolver por exemplo uma eh name vai ser aqui por exemplo sujeito programador Instagram @ sujeito programador eu vou colocar aqui YouTube sujeito programador Beleza entÃĢo criamos uma rota api e como a gente cria dentro Da pasta app uma pasta api dentro dela a gente cria
as pastas das rotas que a gente quer entÃĢo no caso eu criei info e.ts a gente criou uma rota do tipo get que sÃģ devolve ali um Jason nÃĐ simulando sÃģ pra gente ver EntÃĢo como que eu acesso acesso a URL no Nossa aplicaçÃĢo barapi bar que ÃĐ o nome que eu dei entÃĢo se eu acessar aqui Ãģ nÃĢo acessou aqui deu um 500 por quÊ Porque eu sÃģ retornei e eu nÃĢo falei que eu estou querendo retornar um Jason nÃĐ um api EntÃĢo vou Copiar aqui Ãģ objeto return next response Ou posso devolver atÃĐ
o response direto aqui se eu quiser pon Jason abro o parÊnteses e eu vou colar aqui o nosso objeto tambÃĐm posso fazer dessa forma entÃĢo se eu salvar e eu atualizar aqui agora pronto a gente jÃĄ tem uma url uma API dentro da nossa aplicaçÃĢo entÃĢo aqui dentro da documentaçÃĢo se vocÊ procurar aqui por How handlers A gente vai ver todos os exemplos tanto na parte que a gente pode Criar uma rota get post para cadastrar putch para atualizar Patch delete tambÃĐm qualquer verbo http sem nenhum problema entÃĢo por exemplo e deixa eu achar aqui
para vocÊs a gente pode ter aqui rota do tipo post que vocÊ recebe alguma coisa do Body do Jason e vocÊ pode fazer alguma coisa e devolver pro usuÃĄrio entÃĢo vocÊ pode fazer isso tambÃĐm pode fazer streaming devolvendo aà nÃĐ os dados ÃĐ muito legal que a gente pode pode criar rotas backend atreladas aqui Dentro um backend completo A o nosso projeto next Beleza entÃĢo agora pra gente finalizar H handers aqui agora a gente passou por vÃĄrios conceitos aqui de uma forma mais prÃĄtica e nÃĢo tentando se alongar muito e claro para vocÊ que quer
aprender desde o zero a criar projetos profissionais dominar o Next criar sistemas completos tanto com backend dentro do Next A nossa turma tÃĄ com as vagas abertas do Full stack pro e com o valor promocional EntÃĢo tÃĄ aqui Embaixo na descriçÃĢo e comenta aqui se vocÊ quer ver mais vÃdeos aqui no canal de Next ou criando um projeto completo com next tambÃĐm comenta aqui que eu quero saber entÃĢo te beijo aà no prÃģximo vÃdeo aà do canal