Zes kaarten op een dashboard, zes spinners, en ze verschijnen niet samen — ze verschijnen de één na de ander, als dominostenen, want elk begon pas te laden nadat het erboven klaar was. Dat is een waterval, en de totale wachttijd is niet het langzaamste verzoek, maar de som van alle. use() en Suspense breken de keten — maar het interessantste is de machinerie eronder: wat een gesuspend component werkelijk gooit, en hoe HTML die buiten volgorde aankomt toch op de juiste plek belandt.
Tien jaar lang betekende het animeren van een miniatuur naar een hero-afbeelding één techniek: het element voor meten, erna meten, het verschil met een transform simuleren en afspelen. FLIP. Elke animatiebibliotheek doet het zo, en elke betaalt ervoor met JavaScript op de hoofdthread op het slechtst mogelijke moment. De View Transitions API verplaatst die hele truc naar de browser — en sinds React 19.2 en Next.js 16 bestaat het hele contract uit één prop genaamd name.
'use server' oogt als syntactische suiker voor een fetch naar een API-route – en precies daarom behandelen de meeste implementaties het als een gewone functieaanroep. Dat is een vergissing met concrete gevolgen: elke functie gemarkeerd met 'use server' wordt een publiek eindpunt op het netwerk, en een formulier dat op dit mechanisme is gebouwd, werkt zelfs voordat JavaScript de kans heeft gehad om te laden. Ik zoek uit wat er echt achter deze directive gebeurt, en waar de valkuilen zitten die je in de documentatie niet meteen ziet.
Correcte HTML is slechts het startpunt. Ontdek hoe de accessibility tree écht werkt, waarom ARIA vaker kwaad doet dan goed dan je zou denken, en bouw samen met mij een echte accordion, een live region en focusbeheer in Next.js.