Skip to content

03 - JSX e Sintaxe do React

Introdução

JSX (JavaScript XML) é uma extensão de sintaxe para JavaScript que permite escrever código que parece HTML dentro do JavaScript. É a forma padrão de escrever componentes React, tornando o código mais legível e intuitivo para desenvolvedores que já conhecem HTML.

Por que usar JSX? - Sintaxe familiar e intuitiva (similar ao HTML) - Melhor legibilidade do código - Facilita a criação de interfaces de usuário - Permite a mistura de lógica JavaScript com marcação HTML

Características principais do JSX

1. Sintaxe familiar: - Parece HTML, mas é na verdade JavaScript transformado - Permite usar tags e atributos similares ao HTML

2. Expressões JavaScript: - Permite inserir expressões JavaScript usando chaves {} - Pode incluir variáveis, funções e operações

3. Componentes como elementos: - Componentes React podem ser usados como elementos JSX - Facilita a composição e reutilização de código

4. Compilação: - JSX é transformado em chamadas React.createElement() durante o build - Ferramentas como Vite fazem essa transformação automaticamente

Sintaxe Básica do JSX

HTML vs JSX:

// HTML tradicional
<div class="container">
  <h1>Olá Mundo</h1>
  <p>Este é um parágrafo</p>
</div>

// JSX (React)
<div className="container">
  <h1>Olá Mundo</h1>
  <p>Este é um parágrafo</p>
</div>

Principais diferenças: - classclassName - forhtmlFor - Atributos em camelCase: onClick, onChange - Tags devem ser fechadas: <img />, <br />

Expressões JavaScript no JSX

function Welcome() {
  const name = "React";
  const isLoggedIn = true;

  return (
    <div>
      <h1>Olá, {name}!</h1>
      <p>Você está {isLoggedIn ? 'logado' : 'deslogado'}</p>
      <p>Resultado: {2 + 2}</p>
    </div>
  );
}

Renderização Condicional

function UserGreeting({ user }) {
  return (
    <div>
      {user ? (
        <h1>Bem-vindo, {user.name}!</h1>
      ) : (
        <h1>Por favor, faça login</h1>
      )}
    </div>
  );
}

Listas em JSX

function CountryList() {
  const countries = ['Brasil', 'Argentina', 'Chile', 'Uruguai'];

  return (
    <ul>
      {countries.map((country, index) => (
        <li key={index}>{country}</li>
      ))}
    </ul>
  );
}

Iniciando o Projeto: Lista de Países

Vamos começar a construir um projeto que evolui ao longo do curso. Começaremos com uma lista simples de países que será expandida nos próximos módulos.

Projeto Atual: Lista Estática

function App() {
  return (
    <div className="app">
      <h1>🌍 Lista de Países</h1>
      <div className="country-grid">
        <div className="country-card">
          <h3>🇧🇷 Brasil</h3>
          <p>Capital: Brasília</p>
        </div>
        <div className="country-card">
          <h3>🇦🇷 Argentina</h3>
          <p>Capital: Buenos Aires</p>
        </div>
        <div className="country-card">
          <h3>🇨🇱 Chile</h3>
          <p>Capital: Santiago</p>
        </div>
      </div>
    </div>
  );
}

export default App;

CSS básico (App.css):

.app {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
  font-family: Arial, sans-serif;
}

.country-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
  margin-top: 20px;
}

.country-card {
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 15px;
  background-color: #f9f9f9;
}

.country-card h3 {
  margin: 0 0 10px 0;
  color: #333;
}

.country-card p {
  margin: 5px 0;
  color: #666;
}

Próximos Passos do Projeto

Ao longo do curso, este projeto evoluirá:

  • Módulo 4: Separar em componentes reutilizáveis
  • Módulo 5: Usar props para passar dados
  • Módulo 6: Adicionar interatividade com useState
  • Módulo 8: Renderizar listas dinamicamente
  • Módulo 11: Carregar dados de arquivo JSON
  • Módulo 12: Consumir API REST Countries
  • Módulo 13: Adicionar filtros e busca

Exercícios Práticos

1. Modificar o projeto: - Adicione mais países à lista - Inclua informações como população ou idioma - Experimente com diferentes emojis de bandeiras

2. Praticar JSX: - Crie um componente que mostra a data e hora atual - Use expressões JavaScript para calcular a idade de uma pessoa - Implemente renderização condicional para mostrar/ocultar conteúdo

3. Explorar sintaxe: - Experimente diferentes atributos HTML em JSX - Pratique o uso de chaves {} para inserir JavaScript - Teste renderização de listas com diferentes tipos de dados

Conceitos Importantes

  • JSX é obrigatório? Não, mas é a forma padrão e recomendada
  • Diferenças do HTML: Alguns atributos mudam (class → className)
  • JavaScript no JSX: Use chaves {} para inserir código JavaScript
  • Componentes: JSX permite usar componentes como elementos HTML
  • Compilação: JSX é transformado em JavaScript durante o build

Próximo Módulo

No próximo módulo, aprenderemos sobre Componentes, onde dividiremos nosso projeto em partes menores e reutilizáveis, aplicando os conceitos de JSX que acabamos de aprender.