React: Adeus aos problemas com closures obsoletas
Novo Hook useEffectEvent do React 19.2 resolve problemas de closures obsoletas, melhorando performance e simplificando o código.
O React lançou sua terceira atualização do ano, o React 19.2, trazendo a versão estável do Hook useEffectEvent. Este Hook melhora o tratamento de efeitos no React, especialmente ao resolver o problema persistente de closures obsoletas, que muitos desenvolvedores enfrentam diariamente.

O Hook permite que desenvolvedores escrevam efeitos que sempre têm acesso às props e estados mais recentes sem disparar re-renderizações indesejadas. Isso simplifica o código, melhora a performance e elimina uma fonte comum de bugs em aplicações modernas do React.
O que é o Hook useEffectEvent?
O useEffectEvent permite criar manipuladores de eventos estáveis dentro de efeitos, sempre com acesso aos estados e props mais recentes, sem precisar incluí-los no array de dependências. Assim, resolve o problema das closures obsoletas, comum em efeitos do React.
A solução do useEffectEvent
O useEffectEvent soluciona problemas ao extrair a lógica não reativa do efeito:
const onConnected = useEffectEvent(() => { showNotification('Conectado!', theme); }); useEffect(() => { const connection = createConnection(serverUrl, roomId); connection.on('connected', () => { onConnected(); }); connection.connect(); return () => connection.disconnect(); }, [roomId]);
Com isso, a lógica não reativa é separada do efeito, e a prop theme pode ser removida do array de dependências, pois não é mais utilizada diretamente pelo efeito.
useEffectEvent vs useRef
Antes do useEffectEvent, a solução comum era usar useRef para armazenar o valor mais recente de um estado ou prop, atualizando-o a cada renderização. No entanto, isso exigia atualizações manuais e não era uma abordagem ideal.
Limitações da abordagem com useRef
O uso do useRef tem várias desvantagens, como a necessidade de atualizações manuais e a falta de suporte do linter. O useEffectEvent melhora essa abordagem, permitindo definir Eventos de Efeito não reativos que capturam automaticamente as props e estados mais recentes.
Melhores práticas para useEffectEvent
- Quando usar: Necessidade de acessar props/estados mais recentes sem disparar re-renderizações.
- Não usar como atalho de dependência: Não substitui a declaração correta de dependências.
O useEffectEvent simplifica o tratamento de efeitos colaterais no React, tornando o código mais previsível e fácil de depurar, alinhando-se melhor com as regras do React.