<aside> <img src="/icons/arrow-northeast_gray.svg" alt="/icons/arrow-northeast_gray.svg" width="40px" />
Índice
</aside>
<aside> <img src="/icons/notion_green.svg" alt="/icons/notion_green.svg" width="40px" />
Conteúdos
Anatomia de um componente .vue
Interpolação e reatividade com ref e computed
Diretivas: v-bind, v-on, v-if, v-for e v-model
Criando o projeto Gumball Verse
Primeira requisição com useFetch
Layout, base do projeto e nuxt.config.ts
Consumindo a API nas listagens
Páginas de detalhes com rotas dinâmicas
Tratando o erro 404 com createError
Títulos das páginas com useHead
Filtros, paginação e busca com debounce
Desafio: título e favicon dinâmicos
</aside>
Bem-vindo à Parte 2 do workshop! O Nuxt.js é um framework full stack construído sobre o Vue. Ele entrega, já prontos para usar, recursos que toda aplicação real precisa: rotas, servidor e SEO.
Antes de criar o projeto, vamos entender de onde o Nuxt veio, quais problemas ele resolve e alguns conceitos que vão aparecer o tempo todo nas próximas páginas.
O Vue resolvia muito bem a interface, mas cada projeto precisava montar do zero as rotas, a renderização no servidor e a organização de pastas. Inspirados no Next.js, do mundo React, os irmãos Alexandre e Sébastien Chopin criaram o Nuxt.
| Ano | Marco | O que mudou |
|---|---|---|
| 2016 | Lançamento | O Nuxt nasce para levar renderização no servidor ao Vue, com convenções simples. |
| 2018 | Nuxt 2 | Amadurece e vira referência para sites Vue com SEO. |
| 2022 | Nuxt 3 | Reescrito com Vue 3, Vite, TypeScript e o servidor Nitro. |
| 2025 | Nuxt 4 | Nova estrutura com a pasta app/, que usamos no workshop. |
| 2025 | Vercel | A NuxtLabs passa a fazer parte da Vercel. O Nuxt segue open source (MIT). |
pages/ vira uma rota, sem precisar configurar um router;import;useFetch busca os dados no servidor e reaproveita o resultado no navegador;server/, com o Nitro, permite criar a sua própria API no mesmo projeto;A maior diferença entre um projeto Vue puro e um projeto Nuxt está em onde a página é montada.
| Etapa | Vue puro (SPA) | Nuxt (SSR) |
|---|---|---|
| 1 | O navegador recebe um HTML quase vazio | O servidor busca os dados na API |
| 2 | Baixa e executa o JavaScript | Monta o HTML completo |
| 3 | Busca os dados na API | O navegador já mostra o conteúdo |
| 4 | Só então a tela aparece | O Vue "hidrata" e a página fica interativa |
<aside>
💡 É por isso que usamos await no useFetch: o servidor espera os dados antes de enviar a página, e o navegador não precisa repetir a requisição.
</aside>