Sex kort på ett dashboard, sex spinnrar, och de visas inte tillsammans — de visas ett i taget, som dominobrickor, för varje kort startade bara laddningen efter det ovanför var klart. Det är ett vattenfall, och den totala väntetiden är inte den långsammaste förfrågan, utan summen av alla. use() och Suspense bryter kedjan — men det intressanta är maskineriet under: vad en suspenderad komponent faktiskt kastar, och hur HTML som anländer i fel ordning ändå hamnar på rätt ställe.
I tio år innebar animering av en miniatyrbild till en hero-bild en enda teknik: mät elementet före, mät efter, fejka skillnaden med en transform och spela upp. FLIP. Varje animationsbibliotek gör det, och varje betalar för det med JavaScript på huvudtråden vid det sämsta möjliga tillfället. View Transitions API flyttar hela tricket in i webbläsaren — och sedan React 19.2 och Next.js 16 består hela kontraktet av en enda prop kallad name.
'use server' ser ut som syntaktiskt socker för ett fetch-anrop till en API-route – och just därför behandlar de flesta implementationer det som ett vanligt funktionsanrop. Det är ett misstag med konkreta konsekvenser: varje funktion märkt 'use server' blir en offentlig slutpunkt på nätet, och ett formulär byggt på den här mekanismen fungerar även innan JavaScript hunnit laddas. Jag går igenom vad som faktiskt händer bakom det direktivet, och var fallgroparna finns som inte syns i dokumentationen vid första anblicken.
Korrekt HTML är bara startpunkten. Se hur tillgänglighetsträdet faktiskt fungerar, varför ARIA oftare gör skada än nytta än du tror, och bygg en riktig accordion, en live region och fokushantering i Next.js tillsammans med mig.