Pular para o conteúdo principal

Questão de Programação — JavaScript — FGV 2024

ProgramaçãoJavaScript
Código
fg077017
Banca
FGV
Órgão
CGE-PB
Ano
2024
Nível
Superior
Cargo
Auditor de Contas Públicas - Auditoria de Tecnologia da Informação
Considere o seguinte código em JavaScript com Reactimport React from 'react';function Number() {let x = 5, y = 5;const [n, setN] = React.useState(x);React.useEffect(() => {setN(x => x + n);setN(y => x + y);}, [])return n;}Ao se utilizar o componente funcional Number, o valor retornado por Number após a renderização final será:
  1. A5;
  2. B10;
  3. C15;
  4. D20;
  5. E55.
Revelar gabarito e comentário

GabaritoC — 15;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

React hooks: useState e useEffect

Gabarito: letra C — o valor retornado após a renderização final é 15.

A função componente Number inicia o estado n com o valor 5 (x). O useEffect com array vazio executa uma vez após a montagem, contendo duas chamadas a setN com funções updater. Entenda o passo a passo:

  1. Estado inicial: n = 5.

  2. Primeiro setN: setN(x => x + n). O parâmetro x representa o estado anterior (que é 5). O n no corpo da função é a variável do escopo do componente, que vale 5. Então retorna 5 + 5 = 10. O estado passa a ser 10.

  3. Segundo setN: setN(y => x + y). O parâmetro y é o estado anterior (agora 10). As variáveis x e y do escopo externo valem ambas 5. O retorno é 5 + 10 = 15. O estado final é 15.

Após o useEffect, o componente re-renderiza com n = 15, que é o valor retornado.

NÃO CAIA NESSA!

A banca explora a confusão entre os nomes dos parâmetros das funções updater e as variáveis do escopo (x, y, n). No primeiro setN, o x da arrow function não é a variável externa x, mas o estado anterior; já o n usado é o closure (5 fixo). No segundo, o y da arrow é o estado anterior, enquanto x e y do lado direito são as variáveis do componente (ambas 5). Muitos candidatos acham que o n dentro do primeiro updater se refere ao estado atualizado ou que os incrementos se acumulam de forma diferente.

Alternativa A — ❌ Incorreta

Retornaria 5 se nenhuma atualização ocorresse, ignorando o efeito.

Alternativa B — ❌ Incorreta

Considera apenas o primeiro setN, resultando em 10, mas o segundo atualiza novamente.

Alternativa C — ✅ Correta ⟵ GABARITO

Explica corretamente a sequência: primeiro updater leva a 10, segundo a 15.

Alternativa D — ❌ Incorreta

Soma incorreta (ex.: 5+5+5+5 = 20), não respeitando a lógica dos updaters.

Alternativa E — ❌ Incorreta

Possivelmente confunde com concatenação ou soma diferente; não há operação que gere 55.

Gabarito: letra C

Link permanente: /questoes/fg077017