DevPath · Aprenda a programar ESPTEN

Composição: children e slots

Slots: passar elementos via props

Mais de um buraco

children é ótimo quando há um lugar para colocar conteúdo. Mas às vezes um componente tem várias áreas que você quer preencher: um cabeçalho, um corpo, uma barra de ações... Essas áreas chamamos de slots (buracos).

A solução: como em JSX um elemento é mais um valor, você pode passar JSX por meio de props normais, não só via children.

function Panel({ titulo, acoes, children }) {
  return (
    <section className="panel">
      <header>{titulo}</header>
      <main>{children}</main>
      <footer>{acoes}</footer>
    </section>
  );
}

Cada prop é um buraco que quem chama preenche com a marcação que quiser:

<Panel
  titulo={<h2>Configurações</h2>}
  acoes={<button>Salvar</button>}
>
  <p>Conteúdo principal do painel.</p>
</Panel>

children vs slots via props

<DialogoConfirmar
  titulo="Excluir arquivo?"
  cancelar={<button>Não</button>}
  confirmar={<button>Sim, excluir</button>}
/>

Um slot pode ser qualquer nó do React: uma string, um número, um elemento JSX ou até outro componente já construído. Você decide em qual <header>, <aside> ou <footer> colocá-lo.

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 →
← props.children e componentes contêinerComposição versus herança →