Partilhar: WhatsApp
aulify
UC UC00621 · T. Desenv. Software

Ficha 01 · React fundamentos

Componentes, props, estado
Versão · Aluno
Tempo · 4 horas
Aluno(a)
Turma
Data

Exercício 1 · Setup e primeiro componente

Cria um novo projecto Vite chamado react-pratica. Substitui o conteúdo de App.jsx por um componente <Cartao /> que recebe nome, cargo e email como props e mostra-os formatados num cartão.

Resposta:

); }

function App() { return ( ); }

export default App;

</div>

### Exercício 2 · Lista de cartões

Cria um array de 3 utilizadores e renderiza um `<Cartao />` para cada um usando `.map()`. Não esqueças a `key`.

<div class="resposta">

Resposta:

</div>


  );
}

Exercício 3 · Contador com useState

Cria um componente <Counter /> com: - Display do número actual (começa em 0). - Botão "+1" para incrementar. - Botão "-1" para decrementar. - Botão "Reset" para voltar a 0.

Resposta:

); }

</div>

### Exercício 4 · Toggle light/dark

Cria um componente `<App />` com um botão que alterna entre tema claro e escuro. Quando dark, fundo preto e texto branco; quando light, o inverso.

<div class="resposta">

Resposta:

</div>


  );
}

Exercício 5 · Formulário controlado

Cria um formulário de registo com 3 campos: nome, email e idade. Ao submeter (preventDefault), mostra os valores num <pre> abaixo do form.

Resposta:

); }

</div>

### Exercício 6 · Lista de tarefas (Todo)

Cria uma aplicação Todo completa:
- Input + botão para adicionar tarefa.
- Lista de tarefas existentes.
- Checkbox para marcar como feita (texto riscado).
- Botão para remover cada tarefa.

<div class="resposta">

Resposta:

</div>


  );
}

Exercício 7 · Estado partilhado (lifting state up)

Cria dois componentes <Termometro />: um para Celsius, outro para Fahrenheit. Quando o user escreve em qualquer um deles, o outro actualiza com o valor convertido. Sobe o estado para o pai.

Fórmulas: - F = C × 9/5 + 32 - C = (F - 32) × 5/9

Resposta:

); }

function App() { const [celsius, setCelsius] = useState(""); const [fahrenheit, setFahrenheit] = useState("");

const handleCelsius = (val) => { setCelsius(val); if (val === "") { setFahrenheit(""); } else { const f = (Number(val) * 9/5) + 32; setFahrenheit(f.toFixed(2)); } };

const handleFahrenheit = (val) => { setFahrenheit(val); if (val === "") { setCelsius(""); } else { const c = (Number(val) - 32) * 5/9; setCelsius(c.toFixed(2)); } };

return (

); }

</div>

### Exercício 8 · Componente Modal reutilizável

Cria um componente `<Modal isOpen onClose>` que mostra um overlay com children no centro. Tem um botão "X" no topo direito que chama `onClose`. Usa-o numa app para mostrar/esconder uma mensagem de boas-vindas.

<div class="resposta">

Resposta:

</div>


    </div>
  );
}

function App() {
  const [open, setOpen] = useState(true);

  return (
    <div>
      <button onClick={() => setOpen(true)}>Abrir modal</button>
      <Modal isOpen={open} onClose={() => setOpen(false)}>
        <h2>Bem-vindo!</h2>
        <p>Esta é uma mensagem do modal.</p>
      </Modal>
    </div>
  );
}

Nota: e.stopPropagation() impede que clique dentro do modal feche o overlay; onClick={onClose} no overlay permite fechar clicando fora.