Du hast ein React-Projekt aufgesetzt – Zeit für die erste eigene Komponente. Dieser Artikel führt dich Schritt für Schritt durch die wichtigsten Stationen: Wie sieht eine Minimal-Komponente aus, wie wird sie exportiert und importiert, wie wird sie eingebunden und wie übergibst du erste Daten via Props. Am Ende kennst du den vollständigen Lebenslauf einer Komponente von der Datei bis zur Darstellung im Browser.

Was ist eine Komponente?

Eine React-Komponente ist im einfachsten Fall eine JavaScript-Funktion, die JSX zurückgibt. Diese Funktion wird wie ein HTML-Tag aufgerufen, und React rendert das zurückgegebene Markup ins DOM.

Drei Regeln gelten immer:

  1. Der Funktionsname beginnt mit einem Großbuchstaben. Sonst hält React den Aufruf für ein normales HTML-Element.
  2. Die Funktion gibt JSX (oder null) zurück.
  3. Die Komponente wird importiert und eingebunden, bevor sie sichtbar wird.

Schritt 1 – Eine Datei pro Komponente

In einem typischen Vite-Projekt liegt der Quellcode unter src/. Lege dort einen Ordner für Komponenten an und erstelle eine neue Datei.

bash Verzeichnisstruktur
src/
  components/
    Greeting.jsx
  App.jsx
  main.jsx

Konventionell trägt die Datei den gleichen Namen wie die Komponente und beginnt mit Großbuchstaben (Greeting.jsx).

Schritt 2 – Die Komponente schreiben

TypeScript src/components/Greeting.jsx
function Greeting() {
    return <h1>Hallo, React!</h1>;
}

export default Greeting;

Was hier passiert:

  • function Greeting() – Definition als JavaScript-Funktion. Großbuchstabe ist Pflicht.
  • return <h1>...</h1> – JSX wird zurückgegeben.
  • export default Greeting; – die Komponente wird als Standard-Export verfügbar gemacht.

Statt der klassischen Funktionsdeklaration sind auch Arrow-Functions üblich. Beide Varianten sind gleichwertig:

TypeScript Variante mit Arrow-Function
const Greeting = () => {
    return <h1>Hallo, React!</h1>;
};

export default Greeting;

Schritt 3 – Komponente einbinden

Die Komponente existiert jetzt – aber niemand verwendet sie. Importiere sie dort, wo sie sichtbar werden soll. In einem frischen Vite-Projekt ist das die App.jsx:

TypeScript src/App.jsx
import Greeting from './components/Greeting';

function App() {
    return (
        <main>
            <Greeting />
        </main>
    );
}

export default App;

Wichtig: Die Komponente wird wie ein HTML-Tag verwendet – <Greeting />. Da die Komponente keine Kinder hat, wird sie als selbstschließendes Tag geschrieben.

Schritt 4 – Den Render-Einstiegspunkt verstehen

Wo wird die App-Komponente eigentlich ins DOM gerendert? In main.jsx (oder main.tsx):

TypeScript src/main.jsx
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';
import './index.css';

createRoot(document.getElementById('root')).render(
    <StrictMode>
        <App />
    </StrictMode>
);

Hier passiert die Verbindung zwischen React und dem realen DOM:

  • document.getElementById('root') – sucht das <div id="root"> aus der index.html.
  • createRoot(...) – erzeugt einen React-Root für genau dieses DOM-Element.
  • .render(<App />) – rendert die App in diesen Root.

StrictMode aktiviert zusätzliche Konsistenz-Prüfungen während der Entwicklung und hat im Production-Build keinen Einfluss.

Schritt 5 – Komponente mit Props erweitern

Statische Komponenten sind selten interessant. Realistische Komponenten erhalten Daten von außen – über Props.

TypeScript src/components/Greeting.jsx
function Greeting({ name }) {
    return <h1>Hallo, {name}!</h1>;
}

export default Greeting;

Die Komponente nimmt jetzt einen Wert name entgegen und nutzt ihn im JSX. Die Verwendung sieht so aus:

TypeScript src/App.jsx
import Greeting from './components/Greeting';

function App() {
    return (
        <main>
            <Greeting name="Anna" />
            <Greeting name="Bernd" />
            <Greeting name="Carla" />
        </main>
    );
}

export default App;

Damit hast du das wichtigste Prinzip von React in der Hand: Eine Komponente einmal schreiben, beliebig oft mit unterschiedlichen Daten verwenden. Tiefer geht es im Artikel zu Props.

Häufige Anfänger-Fehler

Komponente kleingeschrieben

<greeting /> – React behandelt das als unbekanntes HTML-Tag und rendert nichts. Immer <Greeting /> mit Großbuchstaben.

Vergessener Export

Ohne export default (oder export { ... }) lässt sich die Komponente nicht importieren. Vite zeigt einen leeren Bildschirm und einen Konsolen-Fehler.

Falscher Import-Pfad

./components/Greeting (mit kleingeschriebenem Pfad) vs. ./components/greeting. Auf macOS und Windows oft tolerant, auf Linux-Servern (Build-Pipeline) strikt – kann zu „funktioniert lokal, kaputt im CI" führen.

Mehrere return-Statements

Eine React-Komponente gibt einmal JSX zurück. Mehrere return außerhalb von Bedingungen sind syntaktisch erlaubt, aber unnötig kompliziert und fehleranfällig.

JSX in der Browser-Konsole testen

JSX ist kein gültiges JavaScript – es muss kompiliert werden. Wer es in der Browser-Konsole testet, bekommt Syntax-Errors.

Komponente vs. Element vs. Instanz

Drei Begriffe, die im React-Kosmos schnell durcheinandergehen:

  • Komponente: Die Funktion (oder Klasse) selbst. function Greeting() { ... }.
  • Element: Das Ergebnis eines JSX-Aufrufs – ein Plain-Object, das beschreibt, was gerendert werden soll. <Greeting name="Anna" /> ergibt zur Laufzeit ein React-Element.
  • Instanz: Der gerenderte Knoten im virtuellen DOM-Baum. Pro Verwendungsstelle entsteht eine Instanz.

Eine Komponente kann beliebig oft als Element instanziiert werden. Jede Instanz hat ihren eigenen lokalen State.

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu Grundlagen

Zur Übersicht