Questão nº 59
Questão de Tecnologia da Informação · FGV TCE-SP 2023 (nº 59)
A analista Ana está desenvolvendo a interface gráfica da aplicação web TCEDash, utilizando React com componentes funcionais. Ana precisa que o componente TelaUm, do TCEDash, execute determinada sequência de instruções a cada nova renderização. Porém, a sequência de instruções deve ser garantidamente executada antes de o navegador web atualizar visualmente a tela.
Para garantir a execução antes da atualização visual da tela, Ana deve implementar a sequência de instruções dentro do hook do React:
- AuseEffect;
- BuseTransition;
- CuseLayoutEffect; (alternativa correta)
- DuseDeferredValue;
- EuseImperativeHandle.
Resposta comentada
Gabarito Alternativa C
No React, alguns hooks permitem executar código em momentos específicos do ciclo de vida de um componente. A principal diferença entre useEffect e useLayoutEffect é quando o código dentro deles é executado em relação à atualização visual da tela pelo navegador.
- (A) Incorreta:
useEffectexecuta o código de forma assíncrona, após o navegador ter pintado a tela. Se houver modificações no DOM que afetem o layout, o usuário pode perceber um "flash" visual antes da correção. Esta é a armadilha, poisuseEffecté o hook mais comum para efeitos colaterais, mas não garante a execução antes da pintura. - (B) Incorreta:
useTransitioné usado para marcar atualizações de estado como transições que podem ser interrompidas, priorizando outras atualizações urgentes. Não está relacionado ao momento de execução de um efeito em relação à pintura da tela. - (C) Correta:
useLayoutEffectexecuta o código de forma síncrona e antes de o navegador atualizar visualmente a tela. Isso é crucial para operações que precisam medir ou modificar o DOM e que devem ser refletidas imediatamente na renderização, evitando qualquer "flash" ou inconsistência visual. - (D) Incorreta:
useDeferredValuepermite adiar a re-renderização de uma parte não urgente da UI, mostrando um valor anterior enquanto o novo valor está sendo calculado em segundo plano. Não controla o momento de execução de efeitos em relação à pintura. - (E) Incorreta:
useImperativeHandleé usado para personalizar o valor da instância que é exposto quando um componente pai usa umarefpara interagir com um componente filho. Não tem relação com a execução de código antes da atualização visual da tela.
Fonte: FGV TCE-SP 2023 Agente da Fiscalização - TI (Caderno Tipo 1). Reproduzida para fins de estudo.