Pular para conteúdo

Solução 12 - Introdução ao React ⚛️

Navegação

← Exercício 12 | Próxima Solução →

🟢 Respostas Fáceis

1. Conceito SPA

Resposta 1

SPA - Single Page Application:

**Principal vantagem**: **Navegação fluida** sem recarregar página.

```mermaid
graph TD
    A[Tradicional] --> B[Cada clique = Nova página]
    A --> C[Reload completo]

    D[SPA] --> E[Uma página inicial]
    D --> F[Conteúdo muda via JavaScript]

    style A fill:#ff6b6b
    style D fill:#81c784
```

**Benefícios**: Experiência mobile-like, cache eficiente, transições suaves.

2. className vs class

Resposta 2

Usamos className no React:

```jsx
// ✅ React - className
<div className="botao-azul">Clique</div>

// ❌ HTML - class (palavra reservada JavaScript)
<div class="botao-azul">Clique</div>
```

**Razão**: `class` é **palavra reservada** em JavaScript (ES6 classes).

🟡 Respostas Médias

3. Arquitetura LEGO

Resposta 3

React = LEGO por componentes reutilizáveis:

```jsx
// 🧩 Peças LEGO (componentes)
const Botao = ({ texto, cor }) => <button className={cor}>{texto}</button>;
const Card = ({ titulo, conteudo }) => (
    <div className="card">
        <h3>{titulo}</h3>
        <p>{conteudo}</p>
    </div>
);

// 🏗️ Construção final
const App = () => (
    <div>
        <Card titulo="Post 1" conteudo="Lorem ipsum..." />
        <Botao texto="Curtir" cor="azul" />
        <Botao texto="Compartilhar" cor="verde" />
    </div>
);
```

**Organização**: Componentes pequenos, testáveis e composáveis.

4. Função do Vite

Resposta 4

Vite - Build tool moderno:

- **Dev server ultrarrápido**: Hot Module Reload instantâneo
- **Build otimizado**: Bundling eficiente para produção
- **ES Modules nativo**: Sem transpilação desnecessária
- **Substituiu Create React App**: Performance superior

5. Props para Reutilização

Resposta 5

Props permitem customização:

```jsx
// 🔧 Componente flexível
const Botao = ({ texto, cor, onClick }) => (
    <button
        className={`btn btn-${cor}`}
        onClick={onClick}
    >
        {texto}
    </button>
);

// 🎨 Usos diferentes
<Botao texto="Salvar" cor="verde" onClick={salvar} />
<Botao texto="Cancelar" cor="cinza" onClick={cancelar} />
<Botao texto="Deletar" cor="vermelho" onClick={deletar} />
```

🔴 Resposta Desafio

6. JSX vs HTML

Resposta 6

É JavaScript (JSX - JavaScript XML), não HTML puro.

**2 Diferenças sutis do JSX:**

1. **Self-closing obrigatório**:
   ```jsx
   // ✅ JSX - deve fechar
   <br />
   <img src="foto.jpg" />

   // ❌ HTML - pode não fechar
   <br>
   <img src="foto.jpg">
   ```

2. **Expressões JavaScript**:
   ```jsx
   // ✅ JSX - {} para JavaScript
   <h1>{nome}</h1>
   <div className={ativo ? 'azul' : 'cinza'}>

   // ❌ HTML - texto literal
   <h1>{nome}</h1> <!-- mostra "{nome}" literal -->
   ```

**Respostas específicas:**

**a) Tag `<br>` não fechada:**
```jsx
<br>  // ❌ SyntaxError: JSX element 'br' has no corresponding closing tag
```

**b) Variável no h1:**
```jsx
const nome = "João";
<h1>{nome}</h1>  // ✅ Mostra: João
<h1>Olá, {nome}!</h1>  // ✅ Mostra: Olá, João!
```

Comparação JSX vs HTML

Aspecto HTML JSX
Atributo CSS class="botao" className="botao"
Self-closing <br> opcional <br /> obrigatório
Variáveis Não suporta {variavel}
Eventos onclick="func()" onClick={func}
Comentários <!-- comentário --> {/* comentário */}

!!! tip "Dicas para Próximos Estudos" - Pratique componentes funcionais com hooks - Configure ESLint para JSX - Use React DevTools para debugging

Navegação

← Exercício 12 | Próxima Solução →