🕵️ SicherheitslückenKARR Security vulnerability(02.09.2026 um 03:15 Uhr)
⚠️ Malware / Trojaner / VirenThe Problem with LG TVs Spyware and Its Vulnerabilities(07.09.2026 um 02:02 Uhr)
⚠️ Malware / Trojaner / VirenNew Android malware encrypts files, steals data, and harasses victims(10.09.2026 um 23:40 Uhr)
⚠️ Malware / Trojaner / VirenConti ransomware gang member sentenced to 4 years in prison(11.09.2026 um 08:48 Uhr)
🕵️ SicherheitslückenGitLab urges users to patch max severity path traversal flaw(11.09.2026 um 13:15 Uhr)
⚠️ Malware / Trojaner / VirenHow Threat Actors Are Turning Trusted AI Platforms Into an Attack Surface(11.09.2026 um 16:01 Uhr)
⚠️ Malware / Trojaner / VirenArtifactory flaws chained in attacks deploying backdoor malware(11.09.2026 um 18:29 Uhr)
🕵️ SicherheitslückenDutch NCSC: Critical Check Point VPN flaws exploitation is imminent(12.09.2026 um 16:14 Uhr)
🕵️ SicherheitslückenHackers exploit Tencent app flaw to deploy GrayRabbit malware(13.09.2026 um 16:26 Uhr)
🕵️ SicherheitslückenKARR Security vulnerability(02.09.2026 um 03:15 Uhr)
⚠️ Malware / Trojaner / VirenThe Problem with LG TVs Spyware and Its Vulnerabilities(07.09.2026 um 02:02 Uhr)
⚠️ Malware / Trojaner / VirenNew Android malware encrypts files, steals data, and harasses victims(10.09.2026 um 23:40 Uhr)
⚠️ Malware / Trojaner / VirenConti ransomware gang member sentenced to 4 years in prison(11.09.2026 um 08:48 Uhr)
🕵️ SicherheitslückenGitLab urges users to patch max severity path traversal flaw(11.09.2026 um 13:15 Uhr)
⚠️ Malware / Trojaner / VirenHow Threat Actors Are Turning Trusted AI Platforms Into an Attack Surface(11.09.2026 um 16:01 Uhr)
⚠️ Malware / Trojaner / VirenArtifactory flaws chained in attacks deploying backdoor malware(11.09.2026 um 18:29 Uhr)
🕵️ SicherheitslückenDutch NCSC: Critical Check Point VPN flaws exploitation is imminent(12.09.2026 um 16:14 Uhr)
🕵️ SicherheitslückenHackers exploit Tencent app flaw to deploy GrayRabbit malware(13.09.2026 um 16:26 Uhr)

🔧 Programmierung 🕛 vor 2 Jahren 5 Min Lesezeit
0

HOC Pattern - React

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

No segundo artigo desta série de como fazer uso de design patterns em projetos, especificamente usando React, vamos considerar - um dos meus preferidos - o pattern High Order Component (HOC).



Em poucas palavras, o HOC é uma técnica em que uma função recebe um componente em seu argumento e esta função contém uma lógica que afeta o componente passado por parâmetro, para então renderizá-lo.



O HOC nos permite encapsular uma mesma lógica a ser utilizada em múltiplos componentes sem que precisássemos replicar a lógica em todos eles. Pode ser uma lógica que envolve estilos, permissões, visibilidade de micro-componentes dentro de um componente, além de outros casos de uso.






Show me the code



Imagine que você tenha o seguinte componente:




CODE
import React from "react";

export const Me = () => {
const isLoggedIn = useAuth();

async function handleGetMe() {
const response = await fetch('/profile');
const data = await response.json();

return data;
}

if (!isLoggedIn) {
return (
<div>
Você precisa estar logado para ver essas informações.
</div>
);
}

const profile = handleGetMe();

return (
<div>
<h2>{profile.name}</h2>
<p>{profile.job}</p>
</div>
);
};






Como podemos ver acima, esse componente possui uma lógica de permissionamento. Se o usuário estiver logado, é possível ver os seus dados, mas se não estiver, recebe uma mensagem.



No entanto, temos duas observações a fazer:




  1. Não é tão interessante ter uma lógica assim dentro do componente que tem como objetivo realmente mostrar algo na tela;


  2. Pode ser que essa lógica precise ser usada em outros componentes e nesse formato teria que replicar a lógica nos outros componentes também.




Com certeza há várias formas de construir uma solução para isso, de forma que pudéssemos reutilizar a lógica em múltiplos componentes sem precisar repetir o contexto.



O HOC é uma dessas soluções. Veja um exemplo de criação e uso desse design pattern.




CODE
export default function renderIfAuthenticated(Component: JSX.ElementType) {
return (props) => {
const isLoggedIn = useAuth();

if (!isLoggedIn) {
return (
<div>
Você precisa estar logado para ver essas informações.
</div>
);
}

return <Component {...props} />;
}
}






Agora, nós conseguimos centralizar a lógica dentro de uma função HOC. Em outras palavras, transferimos a responsabilidade para uma única função. Recebemos o componente por parâmetro e o renderizamos apenas se a condição que definimos for verdadeira, nesse caso. E para utilizar podemos fazer assim:




CODE
import { renderIfAuthenticated } from "../hocs/renderIfAuthenticated";

export function Me() {
async function handleGetMe() {
const response = await fetch('/profile');
const data = await response.json();

return data;
}

const profile = handleGetMe();

return (
<div>
<h2>{profile.name}</h2>
<p>{profile.job}</p>
</div>
);
}

const MeRenderWithAuth = renderIfAuthenticated(Me);
export default renderIfAuthenticated;






Note que o componente em si, se mantém o mesmo. A linha de código que faz o encapsulamento no HOC é esta:




CODE
const MeRenderWithAuth = renderIfAuthenticated(Me);






Assim, podemos reutilizar essa lógica em outros componentes que vão fazer uso da mesma lógica de permissionamento.



Vamos ver outro caso de uso. Por exemplo, ao aplicar os mesmos estilos em alguns componentes e extender estilos que serão diferentes para cada um.




CODE
export function renderWithStyles(Component: JSX.Element) {
return (props) => {
const style = {
backgroundColor: "#0B1215",
color: "#F5F5F5",
...props.style,
};

return <Component {...props} style={style} />;
};
}






Aplicando o HOC em múltiplos componentes:



Button




CODE
import { renderWithStyles } from "../hocs/renderWithStyles";

export const Button = (props) => (
<button style={{ fontSize: "20px", ...props.style }}>Enviar</button>
);

const StyledButton = renderWithStyles(Button);
export default StyledButton;






Cardboard




CODE
import { renderWithStyles } from "../hocs/renderWithStyles";

export const Cardboard = (props) => (
<div style={{ fontSize: "20px", fontFamily: "Roboto", ...props.style }}>Enviar</div>
);

const StyledCardboard = renderWithStyles(Cardboard);
export default StyledCardboard;






Basicamento, o que fizemos acima é o que é feito na biblioteca de estilos CSS-In-JS muito conhecida chamada Styled Components. Veja o exemplo abaixo tirado da documentação:




CODE
const Button = styled.button`
color: #BF4F74;
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid #BF4F74;
border-radius: 3px;
`
;

// Aplicação do HOC
const TomatoButton = styled(Button)`
color: tomato;
border-color: tomato;
`
;






O TomatoButton vai herdar os estilos do Button e acrescentar ou substituir propriedades exclusivas para ele.









Considerações finais



Reusabilidade - Os HOC's nos permitem encapsular funcionalidades que são compartilhadas em vários componentes, promovendo o reuso do código;



Separation of Concerns (SOC) - Ajudam a manter a separação de responsabilidades da aplicação, assim os componentes podem focar no objetivo de uso deles;



Abstração de Código - Como os HOC's abstraem a lógica em comum de um ou mais componentes, fica mais canalizado e fácil de entender e dar manutenção;



Composição - Podemos combinar vários HOC's para compor uma funcionalidade complexa dentro dos componentes. Um exemplo de uso de algo assim, mas mais antigo é do MapStateToProps e do MapDispatchToProps do React-Redux:




CODE
export default connect(mapStateToProps, mapDispatchToProps)(AppWrapper(MyComponent))









Portanto, fazer uso dos HOC's tornarão sua aplicação mais fácil de manter e entender, por promover um código limpor e reusável. Assim, suas aplicações React serão mais eficientes.



Mas como todos os padrões de projeto, é preciso pensar no caso de uso, na necessidade e até mesmo na complexidade do projeto para decidir se seria interessante o uso de HOC's.

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
1 Quelle
You might want to watch what you say.
1 Quelle
A beast by any other name.
1 Quelle
Multiple VLC Media Player Vulnerabilities Allow Attackers to Corrupt or Read Heap Memory
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten HOC Pattern - React

Thematisch verwandte Begriffe: Pattern, React · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...