React

Erstellen Sie interaktive UIs mit Komponenten - deklarative, effiziente und flexible JavaScript-Bibliothek für Weboberflächen

TL;DR

Eine Zeile: React ist eine JavaScript-Bibliothek zum Erstellen von UIs mit Komponenten - die Lego-Bausteine der Webentwicklung.

Kernstärken:

  • Komponentenbasiert - einmal bauen, überall wiederverwenden
  • Virtual DOM - schnelle Updates ohne das echte DOM zu berühren
  • Hooks - elegante State- und Lifecycle-Verwaltung
  • Riesiges Ökosystem - React Native, Next.js und tausende Bibliotheken

Core Concepts

Concept 1: Components

Alles in React ist eine Komponente. Eine Komponente ist einfach eine Funktion, die JSX zurückgibt (HTML-ähnliche Syntax in JavaScript).

function Welcome({ name }) {
  return <h1>Hallo, {name}!</h1>;
}

// Wie HTML verwenden
<Welcome name="Alice" />

Concept 2: State & Props

Props = Daten vom Elternelement zum Kind (nur lesen) State = Daten innerhalb einer Komponente verwaltet (kann sich ändern)

function Counter() {
  const [count, setCount] = useState(0);  // State
  return <button onClick={() => setCount(count + 1)}>{count}</button>;
}

Concept 3: One-way Data Flow

Daten fließen von oben nach unten durch Props. Kind kann Elterndaten nicht direkt ändern - stattdessen werden Callback-Funktionen aufgerufen.

Quick Start

Create Project

# Mit Vite (empfohlen)
npm create vite@latest my-app -- --template react
cd my-app
npm install
npm run dev

Project Structure

my-app/
├── src/
│   ├── App.jsx       # Root-Komponente
│   ├── main.jsx      # Einstiegspunkt
│   └── index.css
├── index.html
├── package.json
└── vite.config.js

Minimal Example

// src/App.jsx
import { useState } from 'react';

function App() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>Hallo React!</h1>
      <button onClick={() => setCount(count + 1)}>
        Zähler: {count}
      </button>
    </div>
  );
}

export default App;

Run

npm run dev
# Öffnen Sie http://localhost:5173

Gotchas

Component names must be capitalized

// ❌ Falsch - wird als HTML-Tag behandelt
function myButton() { return <button>Hi</button> }

// ✅ Richtig
function MyButton() { return <button>Hi</button> }

Don’t call handlers, pass them

// ❌ Falsch - wird sofort beim Rendern ausgeführt
<button onClick={handleClick()}>

// ✅ Richtig - übergibt Referenz
<button onClick={handleClick}>

// ✅ Mit Argumenten
<button onClick={() => handleClick(id)}>

State updates are async

const [count, setCount] = useState(0);

function handleClick() {
  setCount(count + 1);
  console.log(count);  // Noch 0! State aktualisiert beim nächsten Render
}

// Funktionsform für mehrere Updates verwenden
setCount(c => c + 1);
setCount(c => c + 1);  // Addiert jetzt korrekt 2

State is immutable

// ❌ Falsch - State mutieren
user.name = 'Neuer Name';
setUser(user);  // React rendert nicht neu!

// ✅ Richtig - neues Objekt
setUser({ ...user, name: 'Neuer Name' });

// Für Arrays
setItems([...items, newItem]);  // Hinzufügen
setItems(items.filter(i => i.id !== id));  // Entfernen

When to Use

Am besten für:

  • Single-Page-Anwendungen (SPAs)
  • Komplexe interaktive UIs
  • Teams, die Komponenten wiederverwenden wollen
  • Projekte, die starke Ökosystem-Unterstützung brauchen

Nicht ideal für:

  • Einfache statische Seiten (Astro, Hugo verwenden)
  • SEO-kritische Seiten ohne SSR-Setup (stattdessen Next.js verwenden)
  • Sehr kleine Projekte (Vanilla JS könnte reichen)

Vergleich:

FeatureReactVueAngular
LernkurveMittelEinfachSteil
Größe40KB30KB150KB+
StilBibliothekFrameworkVollständiges Framework
FlexibilitätHochMittelEigene Meinung

Next Steps

Cheatsheet

MusterCode
Componentfunction Name() { return <div>...</div> }
Propsfunction Card({ title }) { ... }
Stateconst [val, setVal] = useState(initial)
EffectuseEffect(() => { ... }, [deps])
Refconst ref = useRef(null)
Contextconst val = useContext(MyContext)
Bedingt{show && <Component />}
Liste{items.map(i => <Item key={i.id} />)}
EventonClick={fn} / onChange={fn}