0Pricing
React Academy · Aula

Componentes de ordem superior (HOCs) explicados

Envolva componentes para injetar propriedades, proteger rotas ou adicionar registro por meio de fábricas de HOC.

Componentes de ordem superior (HOCs) explicados é uma aula grátis de React Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

Boas-vindas

Nesta lição, você entenderá os componentes de ordem superior (HOCs), como escrevê-los, seus casos de uso comuns e suas vantagens e desvantagens em comparação com os ganchos.

O que é um HOC?

Um componente de ordem superior é uma função que recebe um componente como entrada e retorna um novo componente aprimorado. O HOC adiciona comportamento (como propriedades, verificações de autenticação ou registro) sem modificar o componente original.
// HOC signature
function withEnhancement(WrappedComponent) {
  return function Enhanced(props) {
    // add behaviour here
    return <WrappedComponent {...props} extraProp="value" />;
  };
}

HOC de proteção de autenticação

Um HOC comum redireciona usuários não autenticados para uma página de login. O componente original nunca precisa conhecer a lógica de autenticação.
function withAuth(Component) {
  return function AuthGuard(props) {
    const isLoggedIn = useAuth();
    if (!isLoggedIn) return <Navigate to="/login" />;
    return <Component {...props} />;
  };
}

const ProtectedPage = withAuth(DashboardPage);

HOC de registro

Um HOC pode registrar cada renderização com o nome e as propriedades do componente para fins de depuração. Envolva qualquer componente com withLogger para adicionar rastreamento.
function withLogger(Component) {
  return function Logged(props) {
    console.log('[render]', Component.displayName, props);
    return <Component {...props} />;
  };
}

Repassando propriedades

Sempre espalhe todas as propriedades recebidas no componente envolvido com `{...props}`. Não fazer isso rompe a interface do componente original.
return function HOC(props) {
  return <WrappedComponent {...props} injectedProp={value} />;
};

Definindo displayName

Os componentes retornados por HOCs perdem seu nome no React DevTools. Defina um displayName significativo para identificá-los na árvore de componentes.
function withAuth(Component) {
  function AuthGuard(props) { /* ... */ }
  AuthGuard.displayName = 'withAuth(' + (Component.displayName || Component.name) + ')';
  return AuthGuard;
}

Encaminhando referências

Por padrão, os HOCs bloqueiam referências. Use `React.forwardRef` dentro do HOC para repassar referências ao componente envolvido.
function withStyle(Component) {
  return React.forwardRef(function (props, ref) {
    return <Component ref={ref} {...props} className="styled" />;
  });
}

HOC versus propriedades de renderização versus ganchos

Os HOCs injetam propriedades e podem proteger rotas. As propriedades de renderização passam uma interface dinâmica. Os ganchos personalizados extraem a lógica. No React moderno, os ganchos são preferidos porque evitam o inferno de componentes envolventes e são mais fáceis de compor. Os HOCs são úteis para componentes de classe ou integrações de terceiros.

Inferno de componentes envolventes

Aplicar muitos HOCs cria um aninhamento profundo na árvore de componentes: `withTheme(withAuth(withLogger(MyPage)))`. O DevTools exibe várias camadas envolventes anônimas. Os ganchos evitam isso completamente.

HOCs na prática

`connect()` do Redux, `withRouter()` do React Router v5 e `observer()` do MobX são todos HOCs. Entender HOCs ajuda você a trabalhar com essas interfaces mais antigas de bibliotecas.

Verificação rápida

O que um componente de ordem superior sempre deve fazer com as propriedades que recebe?

Recapitulação

HOCs são funções que recebem um componente e retornam um componente aprimorado. Eles injetam propriedades, protegem rotas e adicionam registro. Sempre espalhe as propriedades, defina displayName e encaminhe referências. Prefira ganchos no React moderno.

A seguir

Próxima lição: **HOC versus propriedades de renderização versus ganchos personalizados** — você comparará as três estratégias de compartilhamento de código quanto à legibilidade, aos testes e à composição.

Perguntas Frequentes

A aula “Componentes de ordem superior (HOCs) explicados” é grátis?

Sim — o texto completo de “Componentes de ordem superior (HOCs) explicados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “Componentes de ordem superior (HOCs) explicados”?

Envolva componentes para injetar propriedades, proteger rotas ou adicionar registro por meio de fábricas de HOC. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Componentes de ordem superior (HOCs) explicados”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Padrão de propriedades de renderização
  2. Componentes de ordem superior (HOCs) explicados
  3. HOC vs propriedades de renderização vs hooks personalizados
  4. Refatorando um HOC para um hook personalizado
← Voltar para React Academy