Pular para o conteúdo

JavaScript essencial

O mínimo de JavaScript que resolve 90% do que um designer precisa entender, começando por onde a comparação com o Figma para de funcionar.

12 min · atualizado em 07 de ago. de 2026

Até aqui a conversa foi confortável. HTML é a árvore de camadas, CSS é o painel de propriedades, e a tradução era quase palavra por palavra.

JavaScript é onde isso muda, e vale dizer logo em vez de fingir que não. O Figma tem um equivalente de layout e um equivalente de estilo. De lógica, ele só tem o protótipo, que liga tela A na tela B e para por aí.

A boa notícia é que a parte de JavaScript que aparece no seu dia a dia é pequena e repetitiva. São seis ideias. Depois delas você não escreve um sistema, mas lê o que a IA devolveu e sabe apontar o que está faltando, que é o objetivo.

1. Guardar um valor

const nome = "Danilo";
let contador = 0;

const é um valor que não vai ser trocado. let é um que vai. Na prática você vai ver const em quase tudo, porque a maior parte das coisas não muda depois de criada.

Os tipos que importam são poucos: texto (entre aspas), número, verdadeiro ou falso, e nada (null ou undefined).

Um detalhe que gera bug de interface: 0 e "" contam como falso quando testados. É a origem daquele card que some quando o valor é zero, ou do "0 itens" que não aparece.

2. Função, que é "entra isso, sai aquilo"

function formatarPreco(valor) {
  return valor.toLocaleString("pt-BR", {
    style: "currency",
    currency: "BRL",
  });
}
 
formatarPreco(1990); // "R$ 1.990,00"

Entra um número, sai um texto formatado. É isso que uma função é.

Você vai ver muito a forma curta, chamada arrow function, que faz exatamente o mesmo:

const formatarPreco = (valor) => valor.toFixed(2);

Vale saber que existe formatação nativa pra moeda, data e número, no idioma certo, sem instalar nada. Toda vez que você vê "R$ 1990.00" ou "07/08/2026" escrito na mão em algum lugar, é sinal de que alguém não sabia disso.

3. Lista e map, de onde vêm os cards

Um array é uma lista. E map é o que transforma cada item da lista em outra coisa:

const produtos = [
  { nome: "Processo detalhado", preco: 149 },
  { nome: "Mentoria", preco: 600 },
];
 
produtos.map((produto) => produto.nome);
// ["Processo detalhado", "Mentoria"]

Na interface, isso vira a lista de cards:

{produtos.map((produto) => (
  <Cartao key={produto.nome} {...produto} />
))}

Aqui tem uma tradução direta com o seu trabalho. Toda vez que você desenha um card e escreve "repetir para cada item", está descrevendo um map. E toda vez que pergunta "e se a lista vier vazia?", está lembrando de tratar produtos.length === 0, que é o estado vazio que quase sempre falta na entrega.

Os outros dois que aparecem sempre:

Método O que faz
map transforma cada item
filter fica só com os que passam num teste
find acha o primeiro que bate

4. Condicional, que é o variant escolhendo sozinho

if (usuario.assinante) {
  mostrarConteudo();
} else {
  mostrarPaywall();
}

No Figma você desenha as duas telas e liga no protótipo. No código existe uma descrição só, que se ajusta ao valor.

A forma curta, que você vai ver dentro de interface o tempo todo:

{carregando ? <Skeleton /> : <Lista itens={itens} />}
 
{erro && <Alerta tipo="erro" mensagem={erro} />}

O ? lê como "se isso, então aquilo, senão aqueloutro". O && lê como "se isso, mostra aquilo, e se não, não mostra nada".

Reconhecer esses dois símbolos é o que separa "esse código é grego" de "ah, aqui é o estado de carregamento".

5. Evento, que é o protótipo de verdade

<button onClick={() => setAberto(true)}>
  Abrir
</button>

Um evento é algo que acontece na tela e um pedaço de código que responde. É a mesma ideia da interação do protótipo, com uma diferença que muda o desenho: no Figma o destino é uma tela, no código o destino é uma mudança de valor. E como a interface se ajusta ao valor, ela se redesenha sozinha.

Os que você vai ver:

Evento Quando
onClick clique, ou Enter num elemento focável
onChange o valor de um campo mudou
onSubmit formulário enviado
onKeyDown tecla apertada

E o detalhe de sempre: onClick num <button> funciona com mouse, com Tab mais Enter e com leitor de tela. O mesmo onClick numa <div> só funciona com mouse. Metade da acessibilidade de um controle vem de graça quando ele é um botão de verdade.

6. Espera, que é por que existe skeleton

Buscar dados demora. Enviar formulário demora. Subir imagem demora. O JavaScript lida com isso de forma assíncrona, o que quer dizer que ele não trava a página enquanto espera.

async function carregarProdutos() {
  const resposta = await fetch("/api/produtos");
  return resposta.json();
}

await é "espera essa parte terminar". E toda espera tem três destinos possíveis: ainda esperando, deu certo, deu errado.

Esses três não são detalhe técnico. São três telas:

  • carregando: skeleton, spinner, botão com "Salvando..."
  • sucesso: a tela que você já desenhou
  • erro: mensagem que diz o que aconteceu e o que fazer agora

Some o estado vazio e você tem os quatro casos que todo componente que busca dado precisa. Quando o dev pergunta "e se der erro?", ele está pedindo a tela que falta, não criando problema.

O que isso muda na sua entrega

A tradução mais útil deste guia não é de sintaxe, é de processo:

No mundo do Design você entrega No código isso vira
Uma tela com dados bonitos O caso de sucesso, um dos quatro
Um card com "repetir" Um map sobre uma lista
Dois variants ligados no protótipo Um if sobre um valor
Uma interação de clique Um evento que muda um valor
Nada sobre o que demora O buraco onde nasce a tela branca de dois segundos

Repare que quatro das cinco linhas você já faz. A que falta é a última, e ela custa uma frase por fluxo.

O que fazer hoje

Pega um fluxo do seu produto que busca dados. Qualquer um: lista de pedidos, resultado de busca, feed.

Escreve os quatro estados dele numa folha: carregando, vazio, erro, cheio. Se algum dos quatro não estiver desenhado, você achou trabalho de design que estava sendo decidido por outra pessoa, provavelmente às pressas, provavelmente na sexta.

Isso não exige escrever uma linha de JavaScript. Exige saber que os quatro existem, e agora você sabe.

O próximo módulo é React, que é onde essas peças viram componente e a conversa volta a ficar familiar, porque componentização é design system com outro nome.

Em breve

Mentoria

Quatro sessões de uma hora, no seu projeto e no seu ritmo, pra atravessar o que trava justo no seu caso.

Me avisa quando sair

Travou em alguma palavra? O glossário tem a definição curta de cada termo que apareceu aqui.