Pular para o conteúdo
~/.primo-academy.sh
☰ Aulas · React do Zero: Componentes, Estado e Hooks · 0/24
Recomendado: essencial

Elevando estado e criando uma fonte de verdade

1 min de leitura

fonte

Se dois componentes precisam enxergar e alterar o mesmo dado, guardar uma cópia em cada um cria risco de divergência. A solução comum é mover o estado para o ancestral compartilhado mais próximo.

import { useState } from 'react';

function CelsiusInput({ value, onChange }) {
  return (
    <label>
      Celsius
      <input
        type="number"
        value={value}
        onChange={(event) => onChange(event.target.value)}
      />
    </label>
  );
}

function TemperaturePreview({ celsius }) {
  const fahrenheit = celsius === '' ? '' : Number(celsius) * 1.8 + 32;
  return <p>Fahrenheit: {fahrenheit === '' ? '-' : fahrenheit.toFixed(1)}</p>;
}

export default function App() {
  const [celsius, setCelsius] = useState('');

  return (
    <main>
      <CelsiusInput value={celsius} onChange={setCelsius} />
      <TemperaturePreview celsius={celsius} />
    </main>
  );
}

Agora App é a fonte de verdade. O input recebe valor e callback por props; o preview recebe o mesmo valor e calcula sua apresentação.

O estado fica no ancestral comum e flui para os filhos por props; eventos retornam mudanças ao pai.
  • Fonte de verdade: evita múltiplas cópias do mesmo dado.
  • Lifting state up: move o estado para o ancestral que coordena os filhos.
  • Componente controlado: recebe valor e callback em vez de possuir aquele estado sozinho.

No próximo nó, vamos reduzir ainda mais o estado guardado calculando valores que podem ser derivados durante a renderização.

// Quiz

Quando dois componentes precisam compartilhar o mesmo valor editável, onde esse estado costuma ficar?

Escolha uma alternativa

// recursos

// avaliação da trilha

—
ainda sem avaliações