DevPath · Aprenda a programar ESPTEN

useReducer e Context

Elevar o estado (lifting state up)

Compartilhar estado entre irmãos

Às vezes dois componentes irmãos precisam compartilhar o mesmo dado: por exemplo, dois campos que devem permanecer sincronizados, ou uma lista e um total que depende dela. Onde vive esse estado?

A técnica se chama "lifting state up" (elevar o estado): coloca-se o estado no ancestral comum mais próximo e passa-se para os filhos o que eles precisarem.

function Pai() {
  const [texto, setTexto] = useState("");

  return (
    <div>
      <Entrada valor={texto} aoMudar={setTexto} />
      <Eco texto={texto} />
    </div>
  );
}

function Entrada({ valor, aoMudar }) {
  return <input value={valor} onChange={(e) => aoMudar(e.target.value)} />;
}

function Eco({ texto }) {
  return <p>Você digitou: {texto}</p>;
}

As duas ideias-chave:

Assim o pai é a única fonte da verdade, e todos os filhos que dependem do dado se mantêm coerentes. Quando a árvore cresce e passar callbacks por muitos níveis se torna incômodo, esse é o sinal para combiná-lo com Context (e até com useReducer) e centralizar tanto o estado quanto sua lógica.

Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Context API: evitar o prop drillingVer o módulo →