navigation Navigation


Basics


Der Aufbau von React Components bildet das Fundament für sauberen, wartbaren und wiederverwendbaren Code in jeder React-Anwendung. In diesem Artikel erfährst du, wie du Komponenten logisch strukturierst, klar voneinander abgrenzt und sinnvoll verschachtelst. Dabei lernst du Best Practices kennen, um Komponenten übersichtlich zu gestalten – von der Dateibenennung bis zur Aufteilung in Presentational und Container Components. Egal ob du einfache UI-Elemente oder komplexe Anwendungsstrukturen entwickelst: Ein durchdachter Component-Aufbau ist entscheidend für Skalierbarkeit und Lesbarkeit deines Codes.

Inhaltsverzeichnis

    Component - Minimale Struktur

    Components sind die Grundbausteine jeder React-Anwendung. In React sind Components im Wesentlichen JavaScript-Funktionen, die UI-Elemente zurückgeben. Sie ermöglichen es, die Benutzeroberfläche in unabhängige, wiederverwendbare Teile aufzuteilen, die isoliert entwickelt und getestet werden können.

    Ein einfaches Component kann wie folgt aussehen.

    MinimalComponent.jsx
    function MinimalComponent() {
        return <p>Hello world</p>;
    }
    
    export default MinimalComponent;

    Die Einbindung in der main.jsx oder in einem anderen, bereits eingebunden Component, ist wichtig, damit dieses Component verarbeitet wird.

    main.jsx
    import { StrictMode } from 'react'
    import { createRoot } from 'react-dom/client'
    import MinimalComponent from './MinimalComponent.jsx'
    
    createRoot(document.getElementById('root')).render(
        <StrictMode>
            <MinimalComponent />
        </StrictMode>,
    )
    

    Als Ergebnis hat man dann eine einfache Ausgabe von Hello world im Browser.

    React Component - Basis Beispiel

    Erklärung der Funktionsweise

    • function MinimalComponent(): Deklaration von einer JavaScript Funktion
    • return: Gib JSX zurück
    • <p>Hello world</p>: Dies ist JSX, eine HTML-ähnliche Syntax (kein HTML)
    • export default MinimalComponent;: Exportiert die Funktion (als default), damit sie in anderen Dateien verwendet werden kann

    Mann die Funktion in einem Component auch als eine Arrow-Funktion definieren.

    Beispiel: Arrow-Funktion
    const MinimalComponent = () => {
        return <p>Hello world</p>;
    }
    
    export default MinimalComponent;

    Ebenfalls kann man den Export direkt vornehmen.

    Hinweis: Es darf nur eine Funktion per default exportiert werden.

    Beispiel: Direkter Export
    export default MinimalComponent = () => {
        return <p>Hello world</p>;
    }

    Components ohne JSX

    React für Browser ist im Grunde eine Kombination aus zwei Paketen: react und react-dom.

    Im Namensraum React gibt es die Funktion createElement, welche dafür zuständig ist, Elemente im/für DOM zu erstellen. Man kann diese Funktion verwenden, um ein Element ohne JSX in einem React Component zu erstellen. Das ist weniger benutzerfreundlich, aber möglich.

    Beispiel: Element ohne JSX
    import React from 'react';
    
    const PlainComponent = () => {
        return React.createElement(
            'a',
            { href: 'https://google.com' },
            'Go to Google'
        );
    };
    
    export default PlainComponent;
    Verwendung
    <PlainComponent />

    Das Resultat dieses Codes ist ganz normales HTML im Browser. Identisch mit zu dem Ergebnis, was bei Verwendung von klassischem JSX herausgekommenw äre.

    React Component - Create element without JSX


    Möchte man verschachtelte Elemente haben, so müsste man mehrmals die React.createElement Funktion verwenden.

    Hier ein verschachteltes Beispiel mit JSX.

    Mit JSX
    function Alert() {
        return (
            <div>
                <h2>Das ist ein Alert</h2>
            </div>
        );
    }

    Wenn man dieses Element ohne JSX aufbauen wollen würde, würde man folgendes verwenden.

    Ohne JSX
    function Alert() {
        return React.createElement(
            'div',
            {},
            React.createElement(
                'h2',
                {},
                'Das ist ein Alert'
            )
        );
    }

    Component mit Inhalten

    Ein Component kann komplexere Strukturen zurückgeben. In JSX muss immer ein (und zwar genau ein) umschließendes Element vorhanden sein. Im folgenden Beispiel ist das der div Container.

    Beispiel: Wrapper-Tag
    const ComponentWithContent = () => {
        return (
            <div>
                <h2>Component mit Inhalten</h2>
                <p>Ich bin ein Paragraph.</p>
            </div>
        );
    };
    
    export default ComponentWithContent;

    Mit diesem Code erhält man im HTML (Client) folgende HTML-Struktur aufgebaut (gerendert).

    React Component - Content Wrapper Tag


    Wenn man keinen zusätzlichen Container im HTML haben möchte, kann man die React Fragments verwenden.

    Beispiel: React Fragment
    const ComponentWithContent = () => {
        return (
            <>
                <h2>Component mit Inhalten</h2>
                <p>Ich bin ein Paragraph.</p>
            </>
        );
    };
    
    export default ComponentWithContent;

    In diesem Fall gibt es kein umgebendes Element in Frontend. Dabei wird die Anforderung von React erfüllt, dass die Component-Funktion genau ein Element zurückliefert.

    React Component - Content Fragment


    Man kann selbstverständlich auch die JSX-Elemente verschachteln. Wichtig ist nur, dass es genau ein umgebendes Element gibt.

    Beispiel: Verschachtelte Elemente
    const ComponentWithContent = () => {
        return (
            <article>
                <h2>Titel des Artikels</h2>
                <p>Inhalt des Artikels steht hier.</p>
                <ul>
                    <li>Element eins</li>
                    <li>Element zwei</li>
                </ul>
            </article>
        );
    };
    
    export default ComponentWithContent;

    Components mit JavaScript-Logik

    Es besteht die Möglichkeit in einem Component Daten zu verarbeiten oder bestimmte Logik zu definieren. Es können einfache Dinge sein oder komplexere Verarbeitung mit Einbeziehung von anderen Bibliotheken oder Funktionen.

    Beispiel: Einfache Variable

    In diesem Beispiel wird eine Variable im Component definiert, die dann im Template (JSX) ausgegeben wird.

    Die Ausgabe von Variablen-Werten oder dynamischen Werten erfolgt in {} Klammern.

    Beispiel: Einfache Variable
    const DynamicData = () => {
        const username = 'John';
    
        return (
            <p>Hi, {username}</p>
        );
    };
    
    export default DynamicData;

    Beispiel: Verwendung von Funktion

    Ebenso kann man in JSX auch direkt Funktionen verwenden, um bestimmte Daten zu erhalten. Dabei kann man mit unterschiedlichen Datentypen arbeiten.

    Beispiel: Verwendung von Funktion
    const DynamicData = () => {
        const getFullname = () => {
            return 'John Doe';
        };
    
        return (
            <p>Hello, {getFullname()}</p>
        );
    };
    
    export default DynamicData;