Aula 2

React

Fragments, Tipos de Componentes e Hooks (useState e useEffect)

📌

📅 Versão atualizada em 19/06/2025 (versão 2)

Nessa versão foram excluídos os seguintes tópicos:

❌ Props - movido para a Aula 3

📌

📅 Versão atualizada em 19/06/2025 (versão 2)

Nessa versão foram incluídos os seguintes tópicos:

✔️ Fragments - movido da Aula 3

✔️ Hooks - movido da Aula 4

✔️ Explicação mais detalhada sobre Estados (useState) - movido da Aula 3

Fragments

React Fragments (<> e </>) permitem agrupar múltiplos elementos JSX sem criar elementos extras no DOM, evitando "divs" desnecessárias.

Exemplo usando Fragment shorthand:


import React from 'react';

function Lista() {
  return (
    <>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
    </>
  );
}
          

Tipos de Componentes

No React, um componente é um pedaço de código reutilizável que representa uma parte da interface do usuário, ajudando a dividir a interface do usuário em partes menores e mais gerenciáveis.

Tipos de componentes do React

Componentes de Classe: Usa a sintaxe da classe JavaScript e tem acesso ao estado e ao ciclo de vida.


import React, { Component } from 'react';

class HelloWorld extends Component {
  render() {
    return (
      <div>
        <h1>Hello, World!</h1>
      </div>
    );
  }
}

export default HelloWorld;

Componentes Funcionais: São funções JavaScript simples que retornam JSX. Com o React Hooks, eles podem gerenciar o estado e os efeitos colaterais.


import React from 'react';

const HelloWorld = () => {
  return (
    <div>
      <h1>Hello, World!</h1>
    </div>
  );
};

export default HelloWorld;

O que são Hooks?

Hooks são funções especiais que permitem que você use recursos do React, como estado e ciclo de vida, em componentes funcionais. Eles foram introduzidos no React 16.8 e eliminaram a necessidade de usar componentes de classe para gerenciar estado ou ciclos de vida.

Principais Hooks

Por enquanto, vamos aprender os seguintes Hooks do React:

O que são Estados no React? (hook useState)

Estados são uma forma de gerenciar dados que podem mudar ao longo do tempo em um componente React. Sempre que o estado é alterado, o componente é re-renderizado para refletir essas mudanças na interface do usuário.

Os estados são usados para criar interfaces dinâmicas e interativas, como alterar o conteúdo exibido com base em ações do usuário, armazenar informações temporárias ou gerenciar inputs de formulários.

Em aplicações modernas, estados são usados em dashboards para atualizações em tempo real, e-commerces para gerenciar carrinhos de compras e SPAs (Single Page Applications) para navegar sem recarregar a página.

Exemplo 1

import React, { useState } from "react";

function Contador() {
  const [contador, setContador] = useState(0); // Estado inicial é 0

  return (
    <div>
      <h1>Contador: {contador}</h1>
      <button onClick={() => setContador(contador + 1)}>Incrementar</button>
      <button onClick={() => setContador(contador - 1)}>Decrementar</button>
      <button onClick={() => setContador(0)}>Resetar</button>
    </div>
  );
}

export default Contador;

Exemplo 2

O estado pode ser um objeto para lidar com dados mais complexos. É importante usar o operador spread (...) para atualizar apenas a propriedade desejada sem sobrescrever o restante.


import React, { useState } from "react";

function PerfilUsuario() {
  const [perfil, setPerfil] = useState({
    nome: "João",
    idade: 30,
    cidade: "São Paulo"
  });

  const atualizarCidade = () => {
    setPerfil({ ...perfil, cidade: "Rio de Janeiro" });
  };

  return (
    <div>
      <h1>Perfil do Usuário</h1>
      <p>Nome: {perfil.nome}</p>
      <p>Idade: {perfil.idade}</p>
      <p>Cidade: {perfil.cidade}</p>
      <button onClick={atualizarCidade}>Mudar Cidade</button>
    </div>
  );
}

export default PerfilUsuario;

Side Effects (hook useEffect)

Os efeitos colaterais (side effects) podem ser usados para lidar com efeitos colaterais, como requisições de dados, manipulação do DOM e manipulação de APIs externas.

Exemplo 1

import React, { useState, useEffect } from "react";

const Timer = () => {
  const [count, setCount] = useState(0);

  useEffect(() => {
    setTimeout(() => {
      setCount((count) => count + 1);
    }, 1000);
  });

  return  <h1>Isso está se repetindo {count} vezes!</h1>;
}

export default Timer;

Exemplo 2

import React, { useState, useEffect } from "react";

function Relogio() {
  const [horario, setHorario] = useState(new Date());

  useEffect(() => {
    // Atualiza o horário a cada segundo
    const intervalo = setInterval(() => {
      setHorario(new Date());
    }, 1000);

    // Cleanup: Limpa o intervalo ao desmontar o componente
    return () => clearInterval(intervalo);
  }, []); 
  // Executa apenas uma vez, na montagem do componente

  return (
    <div>
      <p>Relógio Digital<p>
      <p>
        {horario.toLocaleTimeString()}
      <p>
    <div>
  );
}

export default Relogio;