En anpassad React-prop skickas vidare till ett DOM-element, vilket webbläsaren inte förstår.
Förklaring
React-props och HTML-attribut är inte samma sak. Props är JavaScript-värden som React hanterar internt, medan HTML-attribut är strängar som skrivs in i DOM. Props som inte matchar ett känt HTML-attribut ska aldrig spridas till DOM-element.
Felet är vanligast med komponentabstraktion: en wrapper-komponent tar emot en prop och sprider alla sina props vidare med {...props} till ett underliggande <div> eller <button>. Den anpassade proppen hamnar då på DOM-elementet och webbläsaren vet inte vad den ska göra med den.
I Next.js uppstår det ofta med animationsbibliotek, UI-bibliotek, och egna designsystemkomponenter.
Vanliga orsaker
Spread av props med {...props} på ett DOM-element utan att filtrera bort anpassade props. En komponent vidarebefordrar alla mottagna props inklusive logiska flaggor till det underliggande HTML-elementet.
Lösning
Destrukturera bort anpassade props innan spread:
// Fel — isActive hamnar på <button> i DOM
function Button({ isActive, ...props }) {
return <button {...props} />;
}
// Rätt — använd isActive lokalt och sprid bara HTML-kompatibla props
function Button({ isActive, children, onClick, className }) {
return (
<button
onClick={onClick}
className={`${className ?? ''} ${isActive ? 'active' : ''}`}
>
{children}
</button>
);
}Vid användning av styled-components eller liknande bibliotek används $-prefix, till exempel $isActive, för att markera att en prop inte ska spridas till DOM.