Os exemplos deste artigo são todos deste site — código que está a correr enquanto o lê, e não casos inventados para a ocasião. A ideia é uma só: no App Router do Next, um componente corre no servidor por omissão e nunca chega ao browser . Não é uma afinação de desempenho; muda o que se pode escrever…
Ler o artigo→Há duas formas de usar mal estes dois hooks, e são opostas. Uma é nunca lhes tocar e ter uma aplicação a arrastar-se. A outra — muito mais comum — é embrulhar tudo neles por precaução, e ficar com um código mais difícil de ler que continua exatamente igual de rápido. 1. O que fazem, em duas linhas /…
Ler o artigo→O useRef costuma ser apresentado como «a forma de chegar a um elemento do DOM». É um dos usos, e provavelmente nem é o mais frequente. O que um ref é, na verdade, é mais simples do que isso e explica tudo o resto: uma caixa que sobrevive aos renders e cuja alteração não provoca nenhum . 1. O estado …
Ler o artigo→Há um padrão que aparece em quase todos os projetos React com mais de um ano: um useEffect que observa um valor e escreve outro. Funciona — e é quase sempre a forma mais cara e mais frágil de fazer aquilo que se queria. Uma pergunta só resolve a maior parte destes casos: isto tem de acontecer porque…
Ler o artigo→O React 19 saiu em dezembro de 2024, e tem uma particularidade: a lista do que parte é tão interessante como a das novidades. A maior parte das aplicações atualiza sem drama — e as que não atualizam sem drama falham quase sempre pelas mesmas cinco razões. 1. O ref passa a ser uma prop como as outras…
Ler o artigo→Um ramo pode funcionar perfeitamente e continuar a ser mau de rever. Cinco commits chamados wip , wip2 , corrige typo e agora vai fazem exatamente o mesmo que três commits com uma ideia cada — só que custam o dobro a quem os lê. O git rebase -i serve para isso: arrumar antes de mostrar. Fica dito um…
Ler o artigo→Há um reflexo que quase toda a gente já teve pelo menos uma vez: alguma coisa não funciona por causa de permissões, escreve-se chmod 777 , e passa a funcionar. Resolveu — e é precisamente por resolver que o hábito pega. Vale a pena perceber o que os três números dizem, porque depois disso o 777 deix…
Ler o artigo→Os decorators são aquela sintaxe com @ por cima de uma classe ou de um método. Quem já usou Angular, NestJS ou TypeORM viu-os às dezenas — e quem nunca usou nenhum desses provavelmente nunca precisou de escrever um. Há uma confusão a arrumar primeiro: existem dois sistemas de decorators , incompatív…
Ler o artigo→Acontece a toda a gente. Um .env que escapou ao .gitignore , uma chave colada num ficheiro de configuração "só para testar", um token numa mensagem de commit. E há uma reação instintiva que é a errada. 1. A ordem certa é esta A primeira coisa não é limpar o histórico. É rodar o segredo . A partir do…
Ler o artigo→Há um padrão que qualquer pessoa que trabalhe com promessas já escreveu: criar uma promessa e guardar o resolve numa variável de fora, para a resolver mais tarde, a partir de outro sítio do código. Escrevia-se assim, e não era bonito: let resolver; let rejeitar; const promessa = new Promise((resolve…
Ler o artigo→A Temporal API é a nova especificação oficial do JavaScript (incorporada no ECMAScript 2026 depois de alcançar o Stage 4 em março de 2026), criada para substituir de vez o antigo e problemático objeto Date . Porque é que a Temporal API é revolucionária? Imutabilidade: qualquer alteração num objeto (…
Ler o artigo→O Set no JavaScript é um objeto global nativo que permite guardar valores únicos de qualquer tipo, sejam eles valores primitivos ou referências de objetos. Impede automaticamente a existência de elementos duplicados na coleção. Novas funcionalidades de conjuntos (Set) Aqui estão as novas operações n…
Ler o artigo→Não é para passar em entrevistas. É para responder à pergunta que aparece sempre: funcionava bem com cem registos, porque é que com dez mil demora meio minuto? 1. As quatro que aparecem mesmo O(1) — o tempo não depende do tamanho. Ir buscar a um Map , ler array[5] . O(n) — percorre tudo uma vez. Um …
Ler o artigo→A forma mais comum de os tipos e o código se afastarem é a duplicação. Escreve-se a forma de um artigo no modelo, e escreve-se outra vez — quase igual — no formulário, no pedido, na resposta. Depois acrescenta-se um campo num sítio e esquece-se nos outros. Os tipos utilitários do TypeScript existem …
Ler o artigo→As Core Web Vitals são três números que tentam responder a três perguntas de quem visita: já apareceu? , parou quieto? , responde quando toco? 1. LCP — já apareceu? Mede quanto tempo demora a desenhar o maior elemento visível: quase sempre a imagem de topo ou o título. O bom é 2,5 segundos . O que o…
Ler o artigo→São dois comandos parecidos com um propósito diferente, e trocá-los é a causa daquele clássico: "na minha máquina funciona" . 1. O que cada um faz ao lockfile npm install lê o package.json , resolve o que couber nos intervalos de versões, instala — e reescreve o package-lock.json se encontrar algo m…
Ler o artigo→Um pedido que já ninguém quer continua a ocupar ligação, a gastar bateria, e a chegar atrasado para escrever por cima de um resultado mais recente. O AbortController é a forma padrão de o cortar a meio — e não serve só para o fetch . 1. O básico const controlador = new AbortController(); fetch('/api…
Ler o artigo→"Quero que a página se atualize sozinha" tem três respostas possíveis, e escolher a mais poderosa por defeito é a forma mais comum de complicar um problema simples. 1. Polling: perguntar de vez em quando setInterval(async () => { const resposta = await fetch('/api/notificacoes'); mostrar(await respo…
Ler o artigo→O any desliga o TypeScript. Tudo é permitido num valor any : chamar métodos que não existem, passá-lo a funções que esperam outra coisa, ler campos inventados. O erro aparece na mesma — só que em produção. O unknown é o tipo honesto para "não sei o que isto é": aceita qualquer valor, mas não deixa f…
Ler o artigo→