JavaScript, Node.js, TypeScript, React, HTML5 e CSS3
Do zero
Uma página web é como uma casa:
- O HTML é a estrutura: paredes, cômodos, portas. Diz o que é cada parte (um título, um parágrafo, um formulário).
- O CSS é a decoração: cores, tamanhos, posições. Diz como cada parte aparece.
- O JavaScript é a parte elétrica: o que acontece quando alguém aperta um botão.
O JavaScript nasceu para rodar no navegador. O Node.js levou a mesma linguagem para o servidor: com ele, dá para escrever uma API inteira em JavaScript.
O TypeScript é JavaScript com etiquetas de tipo: você diz que valor é um número, e o compilador reclama, antes de rodar, se alguém tentar somar um texto a ele. No fim, ele vira JavaScript comum.
E o React é um jeito de montar interfaces com componentes, como peças de Lego: um componente “Lista de processos”, outro “Botão de filtro”. Você descreve como a tela deve ficar para cada estado (“mostrando só os urgentes”), e o React redesenha sozinho quando o estado muda.
Frase para guardar: HTML estrutura, CSS apresenta, JavaScript comporta; Node leva o JavaScript ao servidor, TypeScript põe tipos, React desenha a tela a partir do estado.
Em 1 minuto
- JavaScript:
leteconsttêm escopo de bloco;vartem escopo de função. As três são içadas (hoisting), mas só avarcomeça valendoundefined;leteconstficam na zona morta temporal e dão erro se usadas antes da declaração.===compara valor e tipo;==converte os tipos antes ('5' == 5é verdadeiro). É monothread, com um event loop que trata operações assíncronas (Promises,asynceawait) sem travar. - Node.js: ambiente de execução de JavaScript fora do navegador, sobre o motor V8, com entrada e saída não bloqueantes; pacotes pelo npm, descritos no
package.json. - TypeScript: superconjunto do JavaScript com tipagem estática. Os tipos são conferidos na compilação e apagados no JavaScript gerado; não existem em execução.
- React: componentes são funções que devolvem JSX (HTML dentro do JavaScript). Props vêm do componente pai e são só de leitura; estado (
useState) é interno e, ao mudar, provoca nova renderização;useEffectroda efeitos (como buscar dados) depois da renderização. Itens de lista precisam de umakeyestável. - HTML5: elementos semânticos (
header,nav,main,article,section,aside,footer), novos tipos de campo (email,date,number), validação comrequired, mídia nativa (video,audio) ecanvas. - CSS3: modelo de caixa (conteúdo, padding, borda, margem), especificidade (estilo inline, depois id, depois classe, depois elemento), flexbox (uma dimensão), grid (duas dimensões) e media queries (layout responsivo).
Exemplo concreto: a lista de processos
HTML e CSS, com marcação semântica e um layout que muda no celular:
<main>
<section class="processos">
<h1>Processos do dia</h1>
<ul id="lista">…</ul>
</section>
</main>
.processos ul { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; }
@media (max-width: 600px) {
.processos ul { grid-template-columns: 1fr; } /* no celular, uma coluna */
}
React com TypeScript, com o filtro “só urgentes” guardado no estado:
import { useState } from 'react';
type Processo = { numero: string; urgente: boolean };
export function ListaDeProcessos({ processos }: { processos: Processo[] }) {
const [soUrgentes, setSoUrgentes] = useState(false);
const visiveis = soUrgentes ? processos.filter((p) => p.urgente) : processos;
return (
<section>
<label>
<input type="checkbox" checked={soUrgentes}
onChange={(e) => setSoUrgentes(e.target.checked)} />
Só urgentes
</label>
<ul>
{visiveis.map((p) => <li key={p.numero}>{p.numero}</li>)}
</ul>
</section>
);
}
processos é uma prop: vem de fora, e o componente não a altera. soUrgentes é estado: quando o usuário marca a caixa, setSoUrgentes muda o estado e o React desenha a lista de novo. O tipo Processo só existe para o TypeScript conferir o código; some no JavaScript final.
JavaScript assíncrono, buscando os processos de uma API sem travar a página:
async function carregarProcessos() {
const resposta = await fetch('/api/processos'); // a página continua respondendo
if (!resposta.ok) throw new Error('Falha ao carregar');
return resposta.json();
}
Comparação: o que mais confunde
| Expressão | Resultado | Por quê |
|---|---|---|
'5' == 5 |
true |
== converte o texto em número antes de comparar |
'5' === 5 |
false |
=== exige o mesmo tipo |
null == undefined |
true |
Regra especial do == |
null === undefined |
false |
Tipos diferentes |
typeof null |
'object' |
Erro histórico da linguagem, mantido por compatibilidade |
0.1 + 0.2 === 0.3 |
false |
Números de ponto flutuante: dá 0.30000000000000004 |
var |
let |
const |
|
|---|---|---|---|
| Escopo | Função | Bloco | Bloco |
| Pode reatribuir | Sim | Sim | Não (mas o conteúdo de um objeto pode mudar) |
| Uso antes da declaração | undefined (içada) |
Erro (zona morta temporal) | Erro (zona morta temporal) |
| Props | Estado | |
|---|---|---|
| De onde vem | Do componente pai | Do próprio componente |
| Quem altera | Só o pai | O componente, pela função set |
| Ao mudar | O filho é desenhado de novo | O componente é desenhado de novo |
| Flexbox | Grid | |
|---|---|---|
| Dimensões | Uma (linha ou coluna) | Duas (linhas e colunas) |
| Bom para | Barras de menu, alinhar itens numa linha | Layout da página, painéis, tabelas visuais |
O modelo de caixa em números: um elemento com width: 200px, padding: 10px e border: 2px ocupa 200 + 2 × 10 + 2 × 2 = 224 px no padrão (box-sizing: content-box). Com box-sizing: border-box, ocupa só os 200 px: o padding e a borda ficam por dentro. A margem fica sempre do lado de fora.
Especificidade: se li diz azul, .ativo diz verde e #principal diz vermelho, o item <li id="principal" class="ativo"> fica vermelho: id vence classe, que vence elemento. Estilo inline vence os três, e !important passa por cima de todos.
Como a FCC cobra
Resultado de trechos curtos de JavaScript (== × ===, var × let, typeof), props × estado e hooks do React, e os elementos semânticos do HTML5 e o modelo de caixa do CSS.
- Promises,
asynceawaite o event loop. - Características do Node.js (não bloqueante, npm).
- O que o TypeScript acrescenta e o que acontece com os tipos na compilação.
- Seletores, especificidade, flexbox, grid e media queries.
Pegadinhas
- “
'5' === 5é verdadeiro.” Falso: o===não converte tipos; quem converte é o==. - “Os tipos do TypeScript são conferidos pelo navegador durante a execução.” Falso: são conferidos na compilação e apagados no JavaScript gerado.
- “Um componente React pode alterar as próprias props.” Falso: props são só de leitura; para mudar algo, usa-se estado.
- “O Node.js cria uma thread nova para cada requisição.” Falso: o código JavaScript roda numa thread só, com um event loop e entrada e saída não bloqueantes.
- “Com
box-sizing: content-box, o padding fica dentro da largura definida.” Falso: isso é oborder-box; nocontent-box, padding e borda somam à largura. - “
consttorna um objeto imutável.” Falso: impede reatribuir a variável, mas as propriedades do objeto ainda podem mudar.
Explique com suas palavras
Explique a um colega a diferença entre props e estado no React, usando o filtro “só urgentes” de uma lista de processos.
- Escreva sem olhar a lição, com frases curtas e um exemplo seu.
- Onde travar ou precisar de jargão, há uma lacuna: releia só essa parte.
- Compare com a explicação-modelo e reescreva o que faltou.
Fica salva neste navegador.
Comparar com uma explicação-modelo
A lista de processos chega ao componente de fora, de quem o usa: isso é uma prop. O componente só lê a lista, não a altera, porque ela pertence a quem a mandou. Já a caixa “só urgentes” é uma informação do próprio componente: marcada ou não. Isso é estado.
Quando o usuário marca a caixa, o componente muda o próprio estado, e o React desenha a tela de novo, agora só com os processos urgentes. Eu não preciso apagar e criar itens na tela à mão: digo como a tela fica para cada estado, e o React faz o resto.
Teste-se
Desenvolvimento de Sistemas · JavaScript, React e web · Inédita, estilo FCC
Questão 1 de 3
Em JavaScript, as expressões '5' == 5 e '5' === 5 resultam, respectivamente, em
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Desenvolvimento de Sistemas · JavaScript, React e web · Inédita, estilo FCC
Questão 2 de 3
Considere o código JavaScript: for (var i = 0; i < 3; i++) { } e, logo depois, console.log(i). O console exibe
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Desenvolvimento de Sistemas · JavaScript, React e web · Inédita, estilo FCC
Questão 3 de 3
Sobre props e estado em componentes React, é correto afirmar:
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Mais duas questões deste tópico estão em Questões.
Flashcards gerados
| Frente | Verso |
|---|---|
| Node.js | Ambiente que executa JavaScript fora do navegador, sobre o motor V8, com event loop e entrada e saída não bloqueantes; os pacotes vêm do npm. |
| Especificidade no CSS | Estilo inline vence id, que vence classe, que vence elemento; !important passa por cima de todos. |
| Flexbox × grid | Flexbox organiza itens em uma dimensão (linha ou coluna); grid organiza em duas (linhas e colunas). |
| Elementos semânticos do HTML5 | header, nav, main, article, section, aside e footer dizem o papel de cada parte da página, o que ajuda a acessibilidade e os buscadores. |
| async e await | Uma função async devolve uma Promise; o await espera a Promise sem travar a página ou o servidor. Exemplo: const resposta = await fetch('/api/processos'). |
Ligação com o estudo de caso
Num caso sobre um portal para jurisdicionados, proponha a pilha em camadas: front-end em React com TypeScript (tipos reduzem erros, componentes reaproveitáveis), HTML semântico e CSS responsivo (acessibilidade e celular), e uma API em Node.js. Lembre a acessibilidade: elementos semânticos, rótulos nos campos e contraste adequado.
Fontes da lição
- Edital nº 01/2026, Anexo II, Desenvolvimento de Sistemas (fontes/edital-01-2026.txt).
- MDN Web Docs: JavaScript, HTML e CSS.
- Documentação oficial do React (componentes, props, estado e hooks).
- Documentação oficial do TypeScript e do Node.js.
Claude explica
Tire dúvidas sobre este tema no Claude: o site copia o pedido com a lição e abre uma conversa nova, na sua conta. Confira na fonte qualquer fato de lei ou de norma.
Pratique fora do site
Faça questões da FCC sobre este tópico no QConcursos ou no Gran e registre aqui quantas fez: elas contam na meta da semana e no status do tópico.