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→Um formulário aberto na internet acaba por receber a visita de um robô. Sem limite nenhum, uma tarde chega para encher a base de dados — e o custo de a limpar é sempre maior do que o de a proteger. 1. Janela fixa: simples, com um defeito const contagens = new Map(); function dentroDoLimite(chave, ma…
Ler o artigo→Há duas formas de uma página ser rápida: servir depressa, ou não ter de servir de todo. A segunda é sempre melhor, e mora num cabeçalho. 1. Cache-Control, em três casos # Ficheiro com hash no nome (app.9f3c2a.js): nunca muda de conteúdo Cache-Control: public, max-age=31536000, immutable # Uma página…
Ler o artigo→O truque de copiar um objeto com JSON.parse(JSON.stringify(objeto)) anda em código de produção há anos. Funciona até ao dia em que o objeto tem uma data, um Map , um undefined ou uma referência a si próprio — e aí falha em silêncio ou rebenta. O structuredClone é a função nativa que faz esse trabalh…
Ler o artigo→A aplicação corre em localhost:3000 , o Nginx trata do domínio e do certificado, e tudo parece bem — até ao dia em que os endereços que ela gera saem com http://0.0.0.0:3000 , e todos os visitantes ficam com o mesmo IP no registo. O motivo é sempre o mesmo: a aplicação vê o proxy, não vê quem visita…
Ler o artigo→Durante anos, escrever o primeiro teste de um projeto Node começava por escolher entre o Jest, o Mocha, o Vitest e mais três — e por instalar duzentos pacotes para correr uma asserção. Desde a versão 20, o Node traz um executor de testes embutido . Para projetos pequenos e para bibliotecas, muitas v…
Ler o artigo→