SVG in React und Next.js verwenden: Vollständiger Integrationsleitfaden
Meistern Sie die SVG-Integration in React- und Next.js-Anwendungen. Lernen Sie Import-Methoden, Komponenten-Patterns, Optimierung und Best Practices für die moderne Webentwicklung.

Founder of VectoSolve
Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.
How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author
Key Takeaways
- React bietet vier Haupt-SVG-Import-Methoden: Bild-Import, Inline-SVG, SVGR-Komponenten und dynamische Imports
- SVGR mit der Next.js Webpack-Konfiguration bietet die beste Balance zwischen Entwicklererfahrung und Laufzeit-Kontrolle
- Wiederverwendbare Icon-Komponenten mit TypeScript-Props (size, color, className) halten Ihren Code DRY
- Framer Motion integriert sich nativ mit SVG-Elementen für spring-basierte Pfad- und Form-Animationen
-
Fügen Sie immer
aria-labeloderaria-hiddenzu SVG-Icons für die Barrierefreiheit von Screenreadern hinzu
SVG in der modernen React-Entwicklung
SVGs sind unverzichtbar für moderne React-Anwendungen und bieten gestochen scharfe Grafiken in jeder Größe. Dieser Leitfaden behandelt jede Methode der SVG-Verwendung in React- und Next.js-Projekten.
Import-Methoden
1. Standard-Bild-Import
Einfachster Ansatz:
import logo from './logo.svg';
function Header() {
return <img src={logo} alt="Logo" className="logo" />;
}
Vorteile: Einfach, vertraut
Nachteile: Kein Styling-/Manipulationszugriff
2. Inline-SVG-Komponenten
Volle Kontrolle:
function Icon() {
return (
<svg viewBox="0 0 24 24" className="icon">
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5"/>
</svg>
);
}
Vorteile: Voller CSS/JS-Zugriff
Nachteile: Ausführlich, Quelle schwer änderbar
3. SVGR (React-Komponente)
Als Komponente importieren:
import { ReactComponent as Logo } from './logo.svg';
function Header() {
return <Logo className="logo" fill="currentColor" />;
}
Vorteile: Das Beste aus beiden Welten
Nachteile: Erfordert Konfiguration
4. Dynamischer Import
Für Code Splitting:
import dynamic from 'next/dynamic';
const DynamicIcon = dynamic(() => import('./icons/chart.svg'));
function Dashboard() {
return <DynamicIcon />;
}
Pro Tip: Für die meisten React-Projekte ist SVGR der empfohlene Ansatz. Er ermöglicht den Import von SVGs als React-Komponenten mit voller Prop-Unterstützung, während die SVG-Dateien für einfache Bearbeitung in Design-Tools separat bleiben.
SVGR-Konfiguration
Next.js-Setup
// next.config.js
module.exports = {
webpack(config) {
config.module.rules.push({
test: /\.svg$/,
use: ['@svgr/webpack'],
});
return config;
},
};
Mit URL-Fallback
// next.config.js
module.exports = {
webpack(config) {
config.module.rules.push({
test: /\.svg$/,
issuer: /\.[jt]sx?$/,
use: [
{
loader: '@svgr/webpack',
options: {
svgoConfig: {
plugins: [{
name: 'removeViewBox',
active: false
}]
}
}
},
'url-loader'
],
});
return config;
},
};
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual DealKomponenten-Patterns
Wiederverwendbare Icon-Komponente
interface IconProps {
name: string;
size?: number;
color?: string;
className?: string;
}
export function Icon({ name, size = 24, color = 'currentColor', className }: IconProps) {
return (
<svg
width={size}
height={size}
fill={color}
className={className}
>
<use href={`/sprites.svg#${name}`} />
</svg>
);
}
// Verwendung
<Icon name="search" size={20} color="#333" />
Icon-Bibliotheks-Komponente
// icons/index.tsx
import { FC, SVGProps } from 'react';
interface IconComponentProps extends SVGProps<SVGSVGElement> {
size?: number;
}
const createIcon = (path: string): FC<IconComponentProps> => {
return function IconComponent({ size = 24, ...props }) {
return (
<svg
viewBox="0 0 24 24"
width={size}
height={size}
fill="currentColor"
{...props}
>
<path d={path} />
</svg>
);
};
};
export const SearchIcon = createIcon('M15.5 14h-.79l-.28-.27...');
export const HomeIcon = createIcon('M10 20v-6h4v6h5v-8h3L12...');
SVG in React stylen
CSS-Styling
/* styles.css */
.icon {
width: 24px;
height: 24px;
fill: currentColor;
transition: fill 0.2s;
}
.icon:hover {
fill: #0066cc;
}
Styled Components
import styled from 'styled-components';
const StyledSvg = styled.svg`
width: ${props => props.size || 24}px;
height: ${props => props.size || 24}px;
fill: ${props => props.color || 'currentColor'};
transition: fill 0.2s;
&:hover {
fill: ${props => props.hoverColor || props.color};
}
`;
Tailwind CSS
<svg
className="w-6 h-6 fill-current text-gray-600 hover:text-blue-500 transition-colors"
viewBox="0 0 24 24"
>
<path d="..."/>
</svg>
"Der beste SVG-Workflow in React ist einer, bei dem Designer saubere Vektoren exportieren und Entwickler sie als erstklassige Komponenten importieren — ohne manuelle Konvertierungsschritte dazwischen.
Animation in React
CSS-Animation
function LoadingSpinner() {
return (
<svg className="animate-spin" viewBox="0 0 24 24">
<circle
className="opacity-25"
cx="12" cy="12" r="10"
stroke="currentColor" strokeWidth="4"
/>
<path
className="opacity-75"
fill="currentColor"
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
/>
</svg>
);
}
Framer Motion
import { motion } from 'framer-motion';
function AnimatedIcon() {
return (
<motion.svg
viewBox="0 0 24 24"
initial={{ scale: 0 }}
animate={{ scale: 1 }}
transition={{ type: 'spring' }}
>
<motion.path
d="M12 2L2 22h20L12 2z"
initial={{ pathLength: 0 }}
animate={{ pathLength: 1 }}
/>
</motion.svg>
);
}
Free SVG Tools for Crafters
Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG
Check Your SVG FreeOptimierungsstrategien
Build-Zeit-Optimierung
// svgo.config.js
module.exports = {
plugins: [
'preset-default',
'removeDimensions',
{ name: 'removeViewBox', active: false },
{ name: 'prefixIds', params: { prefix: 'svg-' } }
]
};
Code Splitting
// Schwere Icons lazy laden
const ChartIcon = lazy(() => import('./icons/Chart'));
function Dashboard() {
return (
<Suspense fallback={<div className="icon-placeholder" />}>
<ChartIcon />
</Suspense>
);
}
Entfernen Sie niemals viewBox bei der SVGO-Optimierung. Ohne viewBox verlieren SVGs ihre Fähigkeit, responsiv zu skalieren. Setzen Sie immer removeViewBox: false in Ihrer SVGO-Konfiguration.
Barrierefreiheit in React
Barrierefreies Icon-Pattern
interface AccessibleIconProps {
label: string;
children: React.ReactNode;
}
function AccessibleIcon({ label, children }: AccessibleIconProps) {
return (
<span role="img" aria-label={label}>
{children}
</span>
);
}
// Verwendung
<AccessibleIcon label="Suchen">
<SearchIcon />
</AccessibleIcon>
Icon-Button
function IconButton({ icon: Icon, label, onClick }) {
return (
<button
onClick={onClick}
aria-label={label}
className="icon-button"
>
<Icon aria-hidden="true" />
</button>
);
}
VectoSolve-Integration
Workflow
VectoSolve mit React verwenden:
- Bilder in SVG konvertieren
- Optimierte Ausgabe herunterladen
- In Ihr React-Projekt importieren
- Bevorzugte Methode von oben verwenden
Vorteile optimierter Dateien
VectoSolve-SVGs sind:
- Für Webnutzung optimiert
- Bereit für SVGR-Import
- Saubere Pfaddaten
- Einfach zu stylen
A Full Year of Conversions for $49
Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime
Get the Annual DealFazit
React bietet mehrere Möglichkeiten, mit SVGs zu arbeiten, jede mit Kompromissen. Wählen Sie den Ansatz, der zu Ihren Anforderungen passt: einfache Bild-Imports für grundlegende Nutzung, SVGR für volle Kontrolle oder Komponenten-Patterns für Icon-Systeme. Beginnen Sie mit sauberen, optimierten SVGs von VectoSolve für die besten Ergebnisse.
| SVG-Import-Methode | Laufzeit-Kontrolle | Bundle-Auswirkung | Ideal Für |
|---|---|---|---|
| <img src> Import | Keine | Separate HTTP-Anfrage | Statische dekorative Bilder |
| Inline-JSX-SVG | Voll (Props, Events, CSS) | Erhöht Komponentengröße | Interaktive Icons, Animationen |
| SVGR-Komponente | Voll (typisierte Props, Tree-Shaking) | Chunk pro Komponente | Icon-Bibliotheken, Design-Systeme |
| Dynamischer Import | Voll (nach dem Laden) | Code-Split, Lazy Loading | Below-the-Fold oder bedingte SVGs |
Quellen & Weiterführende Lektüre
- MDN Web Docs: SVG in HTML — Referenz zum Einbetten von SVG in JSX und Verstehen der SVG-DOM-Interaktion
- web.dev: Code Splitting — Googles Leitfaden zu Lazy Loading und dynamischen Imports für optimale Bundle-Größe
- CSS-Tricks: SVG in React — Praktische Patterns für die Verwendung von SVG-Komponenten in React- und Next.js-Projekten
- Smashing Magazine: React Components — Best Practices für den Aufbau wiederverwendbarer, barrierefreier SVG-Komponentenbibliotheken