React ist eine JavaScript-Bibliothek, mit der du Benutzeroberflächen aus Komponenten baust. Du beschreibst, wie der Bildschirm für die aktuellen Daten aussehen soll, und wenn sich die Daten ändern, passt React die Seite an. React, React JS und ReactJS sind dasselbe: eine Open-Source-Bibliothek, die bei Facebook (heute Meta) entstanden ist.
Klicke auf beide Buttons. Jeder Counter behält seine eigene Zahl, weil jeder eine eigene Kopie der Komponente mit eigenem State ist. Füge eine dritte Zeile hinzu, <Counter label="Plums" />, und ein neuer, unabhängiger Zähler erscheint.
Dieses kurze Beispiel zeigt schon die drei Ideen, auf denen React aufbaut: Komponenten (Counter und App sind Funktionen, die UI zurückgeben), JSX (die HTML-ähnliche Syntax im return) und State (count, ein Wert, bei dessen Änderung React die Komponente neu zeichnet).
Das Problem, das React löst
Eine Benutzeroberfläche ist ein Bild bestimmter Daten. Wenn sich die Daten ändern, muss sich auch das Bild ändern, und jeder Teil des Bildschirms, der von diesen Daten abhängt, muss mitziehen. Ohne Bibliothek schreibst du diesen Code von Hand: jedes Element finden und dann selbst seinen Text, seine Klasse oder seine Sichtbarkeit setzen. Jedes neue Feature fügt eine weitere Stelle hinzu, an deren Update du denken musst.
React dreht das um. Du schreibst eine Funktion, die sagt, wie der Bildschirm für einen bestimmten State aussehen soll, und React findet heraus, welche Teile der Seite sich ändern müssen. Das nennt man deklarative UI, im Gegensatz zu imperativem Code, der jede DOM-Änderung Schritt für Schritt auflistet. Hier sind beide Stile nebeneinander in einem Beispiel:
ByHand überlässt seinen Absatz reinem DOM-Code (der Effekt führt diesen Code erst aus, nachdem React den Absatz erstellt hat). Er hält die Zahl in einer Variablen, findet jedes Element mit querySelector und setzt seinen Text von Hand. Declarative sagt nur: „Zeig den Zähler und zeig, ob er gerade ist.“ Lösche in handleClick die Zeile, die .parity setzt, und klicke ein paar Mal: Die erste Zeile behauptet jetzt, 3 sei gerade, während die zweite nicht aus dem Takt geraten kann, weil der Text bei jedem Render aus count berechnet wird.
Wie React die Seite aktualisiert
Wenn sich State ändert, ruft React deine Komponentenfunktion erneut auf. Dieser Aufruf ist ein Render. Die Funktion gibt eine frische Beschreibung der UI zurück, React vergleicht sie mit der vorherigen und ändert dann nur die Teile der echten Seite, die sich unterscheiden. Diese Beschreibung im Speicher wird oft virtuelles DOM genannt.
Öffne die Konsole unter der Vorschau und tippe ein paar Buchstaben. Jeder Tastendruck loggt einen Render mit dem neuen Wert. Das Eingabefeld behält seinen Fokus und die Cursorposition, weil React nur den Text des Absatzes und den Wert des Eingabefelds angefasst hat, nicht die ganze Seite. Die Seite zum Rendern erklärt genau, wann eine Komponente erneut rendert.
Komponenten, JSX und State im Überblick
Komponenten sind JavaScript-Funktionen, deren Namen mit einem Großbuchstaben beginnen. Sie geben zurück, was auf dem Bildschirm erscheinen soll, und du verwendest sie wie HTML-Tags: <Counter />. Eine Seite ist ein Baum aus Komponenten, von kleinen wie einem Button bis zu großen wie einem ganzen Einstellungsbildschirm. Siehe Komponenten.
JSX ist die Syntax, mit der du Markup in JavaScript schreibst. Geschweifte Klammern führen zurück in JavaScript, also zeigt {count} einen Wert und {items.map(...)} macht aus einem Array eine Liste. Ein Build-Tool kompiliert JSX in normale Funktionsaufrufe, bevor der Browser es ausführt.
State sind Daten, die sich eine Komponente zwischen Renders merkt. Du erstellst ihn mit dem Hook useState, und mit dem Aufruf seines Setters sagst du React, dass sich etwas geändert hat. Daten fließen über Props von Eltern zu Kindern nach unten, das sind die Argumente einer Komponente.
Dieses Beispiel nutzt alles davon: eine Liste, die aus einem Array im State gerendert wird, und ein Formular, das etwas hinzufügt.
Füge eine Aufgabe hinzu, und zwei Dinge ändern sich gleichzeitig: die Liste und die Anzahl darunter. Du hast der Anzahl nie gesagt, dass sie sich aktualisieren soll. Beide lesen aus tasks, also folgen beide. Ändere das Start-Array zu [], dann zeigt die Liste stattdessen „Nothing to do.“
Was React nicht ist
React ist eine Bibliothek, kein vollständiges Framework. Sie deckt Komponenten, State und deren Umwandlung in UI ab und lässt bewusst einige Dinge weg, die eine komplette App braucht:
- Routing. Es gibt keinen eingebauten Weg, URLs auf Seiten abzubilden. React Router und die Router von Frameworks füllen diese Lücke.
- Daten laden und Server-Rendering. React gibt dir Werkzeuge wie Effekte und Suspense, aber keine Meinung dazu, woher Daten kommen oder wie Seiten auf einem Server rendern.
- Ein Build-Setup. Browser verstehen kein JSX, also brauchst du ein Tool wie Vite, das es kompiliert.
Frameworks bauen auf React auf, um diese Teile zu liefern. Next.js und der Framework-Modus von React Router ergänzen Routing, Server-Rendering und das Laden von Daten, und das React-Team empfiehlt, eine vollständige App mit einem davon zu beginnen. Für eine clientseitige App oder zum Lernen ist Vite mit reinem React ein kleiner und schneller Einstieg; siehe wie du React installierst.
React vs. React Native
React selbst beschreibt nur Komponenten und wie sie sich ändern. Ein separater Renderer macht daraus etwas Sichtbares. React DOM rendert in Webseiten, und das nutzt jedes Beispiel auf dieser Seite. React Native rendert dieselbe Art von Komponenten in native Views für iOS und Android, also schreibst du <View> und <Text> statt <div> und <p>, und es gibt keine HTML- oder CSS-Datei. Komponenten, Props, State und Hooks funktionieren in beiden gleich, also lässt sich das, was du hier lernst, direkt übertragen.
Wann du React lernen solltest
Lerne React nach den JavaScript-Grundlagen, denn alles in React ist JavaScript. Bevor du anfängst, solltest du sicher umgehen können mit:
- Variablen, Funktionen und Arrow Functions
- Arrays und ihren Methoden
mapundfilter - Objekten, Destrukturierung und der Spread-Syntax (
...) importundexport- Promises und
async/awaitzum Laden von Daten
Wenn dir das vertraut vorkommt, beginne mit JSX und Komponenten, dann Props und State. Effekte, Refs, Context und Performance-Werkzeuge kommen später, sobald sich das Bauen kleiner interaktiver Komponenten natürlich anfühlt.
Häufig gestellte Fragen
Wofür wird React verwendet?
Mit React baust du interaktive Benutzeroberflächen: Web-Apps, Dashboards, Formulare, Single Page Apps und Teile gewöhnlicher Websites. Mit React Native baut dasselbe Komponentenmodell Apps für iOS und Android.
Ist React ein Framework oder eine Bibliothek?
React ist eine Bibliothek. Sie kümmert sich um Komponenten, State und Rendern, hat aber keinen eingebauten Router, keine Schicht zum Laden von Daten und kein Build-Setup. Frameworks wie Next.js und der Framework-Modus von React Router ergänzen das auf Basis von React.
Ist React JS dasselbe wie React?
Ja. React, React JS und ReactJS sind drei Namen für dieselbe Bibliothek. Das „JS“ steht dort, weil React in und für JavaScript geschrieben ist.
Muss ich JavaScript können, bevor ich React lerne?
Ja. React-Komponenten sind JavaScript-Funktionen, also solltest du zuerst sicher mit Funktionen, Arrays (map, filter), Objekten, Destrukturierung, Arrow Functions, Modulen und Promises umgehen können.
Was ist der Unterschied zwischen React und React Native?
React beschreibt UIs als Komponenten. React DOM rendert diese Komponenten in eine Webseite, React Native rendert sie als native mobile Views. Komponenten, Props, State und Hooks funktionieren in beiden gleich.