Apresentando o curso e as ferramentas
Vamos colocar a mão na massa. Neste curso, nós vamos desenvolver o Focus novamente, agora usando React.
Quais ferramentas vamos precisar para acompanhar?
- Figma: o arquivo indicado em Preparando o Ambiente é o mesmo do curso anterior.
- Vite: o Vite cuidará do necessário para construirmos uma aplicação em React.
- Uma IDE com algum assistente de código. Algumas opções gratuitas:
- Google Anti-Gravity, que possui um bom plano gratuito.
- Cursor, que utilizamos no curso anterior.
- GitHub Copilot dentro do VS Code (basta instalar).
- Cloud Code, que é uma opção paga, sem plano gratuito e sem opção de teste.
Nós vamos usar o Cloud Code desta vez. Para evitarmos ficar sem créditos, vamos usar o Cloud Code com esse objetivo. Como ele é pago, será necessário fazer a assinatura; no entanto, há alternativas que funcionam com o mesmo mecanismo e com o mesmo fluxo de prompt. Entre elas, estão o GitHub Copilot, o próprio Cursor do curso anterior e o Anti-Gravity. Se não quisermos assinar ali, isto é, se não quisermos fazer a assinatura da Anthropic, outra alternativa paga é o OpenAI Codex. Se já houver uma assinatura da OpenAI, podemos usar o Codex. O funcionamento é o mesmo: são ferramentas diferentes, mas o mecanismo de uso é equivalente.
Podemos pensar nisso como uma aula de direção: cada pessoa escolhe o carro que vai dirigir. Não precisa ser o mesmo carro, porque o mecanismo é o mesmo — volante, alavanca de câmbio, acelerar, frear, embreagem. A ferramenta, neste caso, é o de menos. Escolhemos a que mais agradar, com a qual houver mais familiaridade ou a que já utilizamos no dia a dia.
Configurando o projeto React com Vite
Como vamos criar um projeto em React, precisaremos do Vite. Já aprendemos o que é o Vite e como ele funciona no curso anterior. Vamos direto ao terminal.
No terminal, verificamos se há alguma pasta. Perfeito: o que temos na "Área de Trabalho" é o projeto final do curso anterior. Vamos aproveitar partes dele para facilitar nosso trabalho.
Para checar o conteúdo da pasta atual no terminal, podemos listar os arquivos com:
Agora vamos criar o projeto em React. Já temos um projeto em JavaScript para WebFocus; vamos pedir ao npm que crie outra aplicação com o Vite.
Para iniciar o assistente do Vite, execute:
O create-vite solicitou atualização para a versão 9.1.1; autorizamos a instalação. O nome do projeto será "React-Focus". Em seguida, escolhemos o framework (estrutura): desta vez, não será Vanilla; queremos usar React. Depois, selecionamos a variante: JavaScript com React Compiler.
Quando o assistente pedir o nome do projeto, informe, por exemplo:
Neste momento, o assistente lista diversas formas de trabalhar com React: aparecem opções como React Server Components (que usa um plugin (complemento) do Vite), React Router, TanStack Router, RedwoodJS e Vite, entre outras. Vamos seguir com React com React Compiler. Nós vamos deixar uma atividade em texto explicando o que é o React Compiler, para não entrarmos agora em conteúdo excessivamente teórico. De forma direta, o React Compiler faz exatamente o que o nome indica: compila, isto é, transforma o código que escrevemos em outra coisa. Ele fará essa compilação, essa transformação do que escrevemos para outra forma. Não precisamos nos preocupar com isso neste momento.
O linter (verificador estático) é uma ferramenta que analisa nosso código em busca de erros enquanto ainda estamos escrevendo. Nós vamos usar o ESLint, que já utilizamos há bastante tempo.
Ao final, o assistente pergunta se queremos fazer um install (instalação) e um start (inicialização). Respondemos que sim para ambos. O processo fará exatamente o que já vimos anteriormente. Desta vez, pode demorar um pouco mais, porque uma aplicação Vanilla tem praticamente nenhuma dependência, enquanto React traz as suas; vêm muitos pacotes por padrão como dependências.
Ao terminar, a aplicação abrirá em localhost:5173. Abrimos a página e ela traz bastante conteúdo: há um contador que exibe o valor atual e, conforme clicamos, ele incrementa. Há também bastante documentação, citando a comunidade do Vite no GitHub, no Discord, no X e no Bluesky, além de documentação do próprio Vite e do React. Quando iniciamos uma aplicação do zero com React usando o Vite, esse projeto de exemplo é incluído.
Abrindo o projeto na IDE e explorando a estrutura
O que vamos fazer agora na nossa IDE (ou editor de código)? Vamos abrir outra aba do terminal e abrir o VS Code nessa pasta. Observamos que abrimos por engano na "Área de Trabalho"; não é o que queremos. Queremos entrar na pasta "React-Focus".
Primeiro, abrimos o VS Code na pasta atual:
Como abrimos no diretório errado, navegamos para a pasta do projeto e abrimos novamente o editor:
Agora sim, vamos abrir o VS Code na pasta "ReactFocus". Vamos ajustar o zoom e fechar o Copilot. Aqui está toda a aplicação que foi gerada para nós.
Ao explorar a pasta "src", encontramos o arquivo main.jsx (observe a extensão). Nele, vemos createRoot, StrictMode e App. Com o tempo, entenderemos esses elementos. Em index.css, temos um CSS global. O App.jsx é o que já estamos vendo no navegador: traz o “Get started”, orienta a editar, inclui o botão que incrementa o contador, as seções de documentação do Vite (Vite) e do React (React), e a parte de comunidade. Ou seja, esse App.jsx é o código que montou a tela que vimos no Chrome.
Para conectar a aplicação ao ponto de entrada do HTML, o main.jsx gerado pelo Vite/React usa createRoot, envolve a aplicação em StrictMode e importa os estilos globais. Ele se parece com isto:
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
createRoot(document.getElementById('root')).render(
<StrictMode>
<App />
</StrictMode>,
)
Limpando o scaffold e preparando o App
O que vamos fazer agora? Vamos limpar tudo e deixar o projeto preparado para começarmos o Focus. De baixo para cima, não precisamos alterar nada em main.jsx. No index.css, há muitas definições de cor, media queries (consultas de mídia) e outras regras; podemos remover esse conteúdo. Em app.css, que é o CSS relacionado ao App.jsx, também podemos remover as regras. Não vamos apagar o arquivo; apenas vamos limpar o CSS. O mecanismo de recarregamento é o mesmo do vanilla (JavaScript puro) e já exibe a aplicação aqui sem qualquer estilo — apenas a marcação HTML.
No App.jsx, dentro do return, vamos apagar tudo e deixar somente o return entre parênteses. Também vamos remover todas as importações, de modo que fique apenas o App. A linha 2 com useState também será removida.
Após limpar o conteúdo JSX do return, o componente ainda pode estar com o estado importado e sem markup. Algo assim:
import { useState } from 'react'
function App() {
const [count, setCount] = useState(0)
return (
)
}
export default App
Em seguida, removemos as importações que não vamos usar e também a linha do useState, deixando apenas a função do componente com um return vazio:
function App() {
return (
)
}
export default App
Agora, vamos decidir o que retornar aqui: um h1 com o texto Focus. Primeiro, adicionamos a tag h1:
function App() {
return (
<h1></h1>
)
}
export default App
Por fim, adicionamos o texto dentro do h1. No meu código de exemplo, o título aparece como “Fokus”; se preferir alinhar exatamente ao que falamos na explicação, você pode usar “Focus”.
function App() {
return (
<h1>Fokus</h1>
)
}
export default App
Ao voltar ao navegador, o resultado é exibido. Se inspecionarmos o elemento e selecionarmos o h1 com “Focus”, veremos uma div com id="root" e, dentro dela, o h1 contendo “Focus”.
Analisando dependências e introduzindo o JSX
Temos algumas novidades. Além de o Vite (Vite) já preparar o projeto para React (React), adicionando novas dependências, podemos olhar o package.json: os scripts permanecem os mesmos, não mudou nada. Porém, nas dependências, temos o próprio React (React) — a parte com a qual escrevemos — e o React DOM (Modelo de Objeto do Documento do React), que é responsável por escrever isso no DOM (Modelo de Objeto do Documento) do navegador, algo que já manipulamos bastante.
Há também várias dependências de desenvolvimento: Babel (Babel) core, ESLint (ESLint) — com quatro dependências do ESLint —, um plugin (extensão) do Babel (Babel), os types (tipos) de React (React) e de React DOM (DOM do React), um plugin (extensão) do Vite (Vite) para React (React), o Babel plugin (extensão do Babel) do React Compiler, mais itens de ESLint (ESLint), uma dependência chamada Globals e outra chamada Vite (Vite), que é a ferramenta que utilizamos para montar nosso ambiente de desenvolvimento. Ou seja, já temos bastante coisa diferente.
Não vamos explicar em detalhes o que cada dependência faz. Podemos fazer uma busca no Google ou abrir o assistente de código e pedir essa explicação. Podemos selecionar as dependências de desenvolvimento, copiar e colar no chat, escolher o modelo (por exemplo, o Suite Model), ajustar o zoom se necessário apenas para selecionar o modelo padrão e, então, solicitar: “Explique o que cada uma dessas funcionalidades faz.” No nosso caso aqui, o assistente solicitou autenticação; não vamos iniciar sessão agora. Fica a sugestão para investigar e pedir ao assistente de código que explique cada item; não precisamos entrar nesse terreno neste momento.
Além disso, há um index.html com uma div id="root" vazia, e ele importa um arquivo jsx a partir de src/main. Ao final, está o código que escrevemos. Isso é relativamente diferente do Vite (Vite), e há algo novo nessa extensão .jsx — até agora, usávamos apenas .js. O return está retornando algo que se parece muito com HTML, porém dentro de uma função. Esse JSX mistura uma marcação semelhante a HTML com JavaScript (JavaScript).
Encerrando a configuração e antecipando os próximos tópicos
A base do projeto — nosso ponto de partida — está pronta. A partir daqui, vamos evoluir, saindo desse h1 até chegarmos à nossa aplicação completa em funcionamento.
Antes de começarmos a escrever código, vamos conversar sobre o que é React (React), o que é JSX, como funciona e tudo mais. Antes de continuar com nosso hands-on (prática), vamos nos aprofundar nessa biblioteca de frontend (interface de cliente) tão conhecida chamada React (React). Falaremos sobre isso no próximo vídeo.