So fügst du Icons in React ein: lucide-react, react-icons, Inline-SVG oder Sprites im Vergleich, gemessene Bundle-Größen, Größe über currentColor, Barrierefreiheit und Einrichtung in Next.js.
Installiere ein Icon-Paket wie lucide-react oder react-icons und importiere jedes Icon über seinen Namen, zum Beispiel import { Camera } from "lucide-react". Benannte Importe sind tree-shakebar, daher landen nur die Icons im Bundle, die du verwendest. Lege die Größe über Props oder 1em fest, färbe Icons über currentColor ein und verstecke dekorative Icons mit aria-hidden.
Schnelle Empfehlungen
In diesem Guide geht es darum, Icons in React-Code einzubinden. Welche kostenlosen Icon-Sets du wählen solltest und welche Lizenzen sie haben, steht in unserer Liste der besten kostenlosen Icon-Bibliotheken. Die Größenangaben hier stammen aus unseren eigenen Builds, Tool und Einstellungen sind jeweils angegeben.
In unserem Test waren beide bei einem einzelnen benannten Import klein: 874 Bytes gzipped für ein lucide-react-Icon und etwa 1.3 KB für ein react-icons-Icon, weil react-icons einen kleinen gemeinsamen Wrapper hinzufügt. Bei beiden wächst die Größe pro weiterem Icon nur um wenige hundert Bytes.
Die meisten React-Icon-Komponenten zeichnen mit currentColor, setze also die CSS-Eigenschaft color auf dem Icon oder seinem Elternelement, zum Beispiel mit einer Textfarben-Klasse. lucide-react und react-icons akzeptieren außerdem eine color-Prop.
Nur wenn das Icon als Einziges eine Bedeutung vermittelt. Dann gibst du ihm role="img" und ein aria-label oder beschriftest den Button, der es enthält. Icons neben sichtbarem Text sollten mit aria-hidden="true" versteckt werden.
Ja. Die Komponenten von lucide-react und react-icons sind zustandslose SVGs und werden auf dem Server gerendert. "use client" brauchst du nur in einer Komponente, die State oder Event-Handler nutzt.
Wenn dieselben Icons sehr oft vorkommen oder auf Seiten, die nicht mit React gebaut sind. Jedes <use> ist ein kurzer Verweis auf eine einzige gecachte Datei, statt die kompletten Pfaddaten im HTML zu wiederholen.
Vier Wege, Icons in eine React-App zu bringen
Jedes Icon ist ein benannter Export. size, color und strokeWidth sind Props, und jede andere Prop wird an das svg weitergereicht.
Importiere aus dem eigenen Pfad der Familie (fa, md, lu, fi und so weiter). IconContext.Provider legt Standardwerte für alle Icons darin fest.
Füge die Pfaddaten einmal ein und verwende sie wie jede andere Komponente. width und height von 1em sorgen dafür, dass sie der Schriftgröße folgt.
Wir haben Importe einzelner Icons mit esbuild im Produktionsmodus gebündelt und das Ergebnis mit gzip komprimiert. Benannte Importe aus beiden Paketen bleiben klein; ein Namespace-Import zieht das ganze Set herein. React selbst ist nicht mitgezählt.
Gemessene zusätzliche Größe durch Icon-Importe (minifiziert, dann gzip -9; React nicht mitgezählt)
Definiere jedes Icon einmal als <symbol> und zeichne es dann überall mit <use>. Ändere die Farbe am Wrapper, und beide Icons folgen, weil die Pfade currentColor verwenden.
Liefere die Symbole als /icons.svg aus und verweise jedes Icon auf eine id darin. Der Browser lädt die Datei einmal herunter und cacht sie. Ein externes Sprite muss auf demselben Origin liegen.
Icons mit currentColor übernehmen die Textfarbe ihres Elternelements, daher brauchen Hover- und Dark-Mode-Styles kein eigenes Icon-CSS. Ändere den color-Wert und sieh zu, wie beide Icons folgen.
Ein Icon neben sichtbarem Text ist Dekoration: Verstecke es. Ein Icon, das der einzige Inhalt eines Buttons ist, braucht einen Namen auf dem Button.
Die Komponenten von lucide-react und react-icons rendern problemlos in Server Components, weil sie einfache SVGs ohne State sind. Nur die Komponente, die einen Klick verarbeitet, braucht "use client".
Next.js optimiert Importe bereits für eine Liste gängiger Icon-Pakete, darunter lucide-react und react-icons. Füge hier jedes weitere Icon-Paket hinzu, das du nutzt, damit Dev-Builds schnell bleiben.
Wählst du zuerst ein Set aus? Sieh dir
die besten kostenlosen Icon-Bibliotheken an
Kostenlos starten · Keine Kreditkarte nötig