Pular para o conteúdo principal

Questão de Programação — CSS (Cascading Style Sheets) — Avança SP 2025

ProgramaçãoCSS (Cascading Style Sheets)
Código
qg425162
Banca
Avança SP
Órgão
UNITAU
Ano
2025
Nível
Superior
Cargo
Programador Pleno
Em uma aplicação que utiliza CSS-in-JS com styled-components, qual abordagem é mais adequada para implementar temas dinâmicos?
  1. AUsar variáveis CSS globais
  2. BImplementar ThemeProvider com contexto React
  3. CDefinir estilos inline
  4. DCriar múltiplos arquivos CSS
  5. EAplicar classes CSS diretamente no JSX
Revelar gabarito e comentário

GabaritoB — Implementar ThemeProvider com contexto React

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”.

Temas dinâmicos com styled-components

Gabarito: letra B. Em uma aplicação que utiliza CSS-in-JS com styled-components, a abordagem mais adequada para implementar temas dinâmicos é o ThemeProvider com contexto React, pois ele permite que os valores do tema sejam acessados por todos os componentes estilizados de forma reativa e centralizada, propagando mudanças de tema automaticamente pela árvore de componentes. As demais alternativas (variáveis CSS globais, estilos inline, múltiplos arquivos CSS e classes diretamente no JSX) não aproveitam o mecanismo de contexto e a integração nativa que o styled-components oferece para temas dinâmicos.

O styled-components é uma biblioteca de CSS-in-JS que permite escrever estilos dentro de componentes JavaScript, gerando classes CSS automaticamente. Para temas dinâmicos, a biblioteca fornece o componente ThemeProvider, que utiliza o Context API do React para disponibilizar um objeto de tema para todos os componentes estilizados que estiverem dentro dele. Quando o valor do tema muda (por exemplo, ao alternar entre modo claro e escuro), o ThemeProvider re-renderiza os componentes consumidores, e os estilos são recalculados com os novos valores. Essa é a abordagem recomendada pela documentação oficial do styled-components, pois é reativa, evita prop drilling e mantém a lógica de tema centralizada.

Na prática, o fluxo é: define-se um objeto com as cores, espaçamentos e tipografia do tema; envolve-se a aplicação (ou parte dela) com o ThemeProvider passando esse objeto; nos componentes estilizados, acessa-se as propriedades do tema através da função props => props.theme.corPrimaria. Para alternar o tema, basta mudar o objeto passado ao ThemeProvider, e todos os componentes que dependem dele são atualizados automaticamente. Essa abordagem é superior às alternativas porque integra o tema ao ciclo de vida do React, permitindo que mudanças de estado (como um botão de alternância) reflitam imediatamente nos estilos.

A pegadinha desta questão está em confundir a abordagem específica do styled-components com técnicas genéricas de CSS. Variáveis CSS globais (alternativa A) são uma solução válida para temas, mas não são a abordagem "mais adequada" quando se usa styled-components, pois não aproveitam o contexto React e a reatividade integrada. Estilos inline (alternativa C) são inadequados para temas dinâmicos porque não suportam pseudo-classes, media queries e são difíceis de manter. Múltiplos arquivos CSS (alternativa D) e classes diretamente no JSX (alternativa E) são abordagens tradicionais que não oferecem a mesma integração com o estado do React.

Guarde a distinção central: quando a pergunta menciona explicitamente "styled-components" e "temas dinâmicos", a resposta esperada é o mecanismo que a própria biblioteca oferece para esse fim — o ThemeProvider com contexto React. As outras opções são técnicas de CSS que existem, mas não são a forma idiomática de resolver o problema dentro do ecossistema styled-components.

Temas dinâmicos com styled-components
  • 1Abordagem idiomática
    • ThemeProvider
    • Context API do React
    • Acesso via props.theme
    • Reatividade automática
  • 2Técnicas genéricas de CSS
    • Variáveis CSS globais
    • Múltiplos arquivos CSS
    • Classes no JSX
    • Estilos inline
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Variáveis CSS globais (definidas em :root ou html) são uma técnica válida para temas, mas não são a abordagem mais adequada quando se usa styled-components. Elas não aproveitam o Context API do React nem a reatividade integrada do styled-components. Embora seja possível combiná-las com styled-components, a documentação oficial recomenda o ThemeProvider como a forma nativa de lidar com temas dinâmicos nessa biblioteca.

Alternativa B — ✅ Correta ⟵ GABARITO

O ThemeProvider com contexto React é a abordagem oficial e mais adequada para temas dinâmicos com styled-components. Ele utiliza o Context API para propagar o objeto de tema para todos os componentes estilizados, permitindo que mudanças no tema sejam refletidas automaticamente em toda a árvore de componentes. Essa é a solução que integra o tema ao ciclo de vida do React, tornando a alternância de temas (claro/escuro, por exemplo) reativa e centralizada.

Alternativa C — ❌ Incorreta

Definir estilos inline (atributo style no JSX) é inadequado para temas dinâmicos. Estilos inline não suportam pseudo-classes (:hover), media queries e são difíceis de manter e escalar. Além disso, não há um mecanismo nativo de propagação de tema — cada componente precisaria receber as cores via props, o que gera prop drilling e código repetitivo. Não é a abordagem recomendada para temas dinâmicos com styled-components.

Alternativa D — ❌ Incorreta

Criar múltiplos arquivos CSS (um para cada tema) é uma abordagem tradicional, mas não é a mais adequada para temas dinâmicos com styled-components. Ela exige carregar/descarregar arquivos CSS manualmente, não aproveita a reatividade do React e dificulta a manutenção. O styled-components foi criado justamente para eliminar a necessidade de arquivos CSS separados, integrando os estilos ao JavaScript.

Alternativa E — ❌ Incorreta

Aplicar classes CSS diretamente no JSX (por exemplo, className={tema === 'escuro' ? 'dark' : 'light'}) é uma técnica possível, mas não é a abordagem mais adequada para temas dinâmicos com styled-components. Ela depende de CSS global ou módulos CSS, não aproveita o mecanismo de contexto do React nem a integração nativa do styled-components. O ThemeProvider oferece uma solução mais limpa e reativa, sem a necessidade de gerenciar classes manualmente.

NÃO CAIA NESSA!

A banca explora a confusão entre técnicas genéricas de CSS (variáveis globais, arquivos CSS) e o mecanismo específico do styled-components. Quando a questão menciona "styled-components" e "temas dinâmicos", a resposta esperada é o ThemeProvider com contexto React — não uma técnica de CSS tradicional. Fique atento ao contexto da pergunta: se ela fala de CSS-in-JS, a solução idiomática é a que integra o tema ao React.

PEGA ESSA DICA!

Para questões sobre styled-components, lembre-se do fluxo: ThemeProvider → objeto de tema → acesso via props.theme nos componentes estilizados. Se a alternativa menciona "contexto React" ou "ThemeProvider", é quase sempre a correta quando o assunto é tema dinâmico. Compare com variáveis CSS globais: elas são úteis, mas não são a abordagem nativa do styled-components.

Gabarito: letra B

Link permanente: /questoes/qg425162