ReactJS - Komponenten: Dein Tor zum Aufbau dynamischer Benutzeroberflächen
Hallo da draußen, zukünftige React-Zauberer! ? Ich freue mich sehr, euer Guide auf dieser aufregenden Reise in die Welt der React-Komponenten zu sein. Als jemand, der seit Jahren Informatik unterrichtet, kann ich euch sagen, dass das Verständnis von Komponenten wie das Öffnen eines Schatzkastens voller Möglichkeiten der Webentwicklung ist. Also tauchen wir ein und machen dieses komplexe Thema so klar wie einen glasklaren See!
Was sind React-Komponenten?
Bevor wir mit dem Coden beginnen, lassen wir uns darstellen, was Komponenten sind. Stellt euch vor, ihr baut ein Haus mit Lego-Steinen. Jedes Zimmer könnte als Komponente betrachtet werden - selbstaufhaltend, wiederverwendbar und Teil einer größeren Struktur. Genau das sind React-Komponenten in der Welt der Webentwicklung!
Komponenten sind die Bausteine jeder React-Anwendung. Sie sind unabhängige und wiederverwendbare Stücke Code, die die gleiche Funktion wie JavaScript-Funktionen erfüllen, aber isoliert arbeiten und HTML über eine Render-Funktion zurückgeben.
Arten von React-Komponenten
Im React-Universum haben wir zwei Hauptarten von Komponenten:
- Funktionskomponenten
- Klassenkomponenten
Lassen wir uns jede dieser Arten im Detail erkunden.
Funktionskomponenten
Funktionskomponenten sind die einfachste Möglichkeit, Komponenten in React zu schreiben. Sie sind nichts anderes als JavaScript-Funktionen, die JSX (React's Syntax zur Beschreibung dessen, wie die UI aussehen sollte) zurückgeben.
Erstellen einer Funktionskomponente
So erstellt ihr eine einfache Funktionskomponente:
function Welcome(props) {
return <h1>Hello, {props.name}!</h1>;
}
Lassen wir das auseinanderfallen:
- Wir definieren eine Funktion namens
Welcome
. - Sie nimmt einen einzigen Argument,
props
(kurz für Eigenschaften). - Sie gibt ein Stück JSX zurück, das ein
<h1>
-Element mit einer Begrüßung enthält. -
{props.name}
ist die Art und Weise, wie wir diename
-Eigenschaft nutzen, die an diese Komponente übergeben wird.
Um diese Komponente zu verwenden, würdet ihr schreiben:
<Welcome name="Alice" />
Dies würde auf der Seite "Hello, Alice!" rendern.
Ist das nicht toll? Es ist, als ob ihr eigene benutzerdefinierte HTML-Tags erstellt!
Klassenkomponenten
Klassenkomponenten sind etwas komplexer, bieten aber mehr Funktionen. Sie sind ES6-Klassen, die von React.Component erben.
Erstellen einer Klassenkomponente
So erstellt ihr eine Klassenkomponente:
import React from 'react';
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
Lassen wir das analysieren:
- Wir importieren React (notwendig für Klassenkomponenten).
- Wir definieren eine Klasse namens
Welcome
, dieReact.Component
erweitert. - Die Klasse hat eine
render()
-Methode, die JSX zurückgibt. - Wir greifen auf Props über
this.props
anstelle von nurprops
zu.
Die Verwendung dieser Komponente sieht genau so aus wie bei der Funktionskomponente:
<Welcome name="Bob" />
Dies würde auf der Seite "Hello, Bob!" rendern.
Wann sollte man Funktions- oder Klassenkomponenten verwenden?
Hier ist eine kurze Vergleichstabelle, um euch zu helfen:
Eigenschaft | Funktionskomponenten | Klassenkomponenten |
---|---|---|
Syntax | Einfacher, leichter lesbar und zu testen | Komplexer |
State | Können Hooks für State verwenden | Können this.state verwenden |
Lebenszyklusmethoden | Verwenden useEffect-Hook | Haben Zugang zu allen Lebenszyklusmethoden |
Leistung | Etwas besser | Etwas langsamer |
Zukunft | in modernem React bevorzugt | Könnten in Zukunft ausphasen |
Als allgemeine Regel: Beginnt mit Funktionskomponenten und verwendet nur Klassenkomponenten, wenn ihr spezifische Funktionen benötigt, die sie bieten.
Erstellen von komplexeren Komponenten
Nun, da wir die Grundlagen abgedeckt haben, lassen uns ein komplexeres Komponente erstellen, das zeigt, wie wir größere UI-Teile aus kleineren Komponenten zusammensetzen können.
function Comment(props) {
return (
<div className="Comment">
<UserInfo user={props.author} />
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}
function UserInfo(props) {
return (
<div className="UserInfo">
<Avatar user={props.user} />
<div className="UserInfo-name">
{props.user.name}
</div>
</div>
);
}
function Avatar(props) {
return (
<img className="Avatar"
src={props.user.avatarUrl}
alt={props.user.name}
/>
);
}
In diesem Beispiel:
- Wir haben eine Hauptkomponente
Comment
, die eineUserInfo
-Komponente verwendet. - Die
UserInfo
-Komponente verwendet ihrerseits eineAvatar
-Komponente. - Jede Komponente ist für die Darstellung eines bestimmten Teils der UI verantwortlich.
Diese Struktur zeigt die Macht der Komponentenzusammensetzung - das Erstellen komplexer UIs aus einfachen, wiederverwendbaren Teilen.
Aufteilen von Komponenten
Wenn eure App wächst, ist es wichtig, Komponenten in kleinere, handhabbare Stücke zu teilen. Aber wie wisst ihr, wann ihr eine Komponente teilen sollt? Hier sind einige Richtlinien:
- Einzelfunktionsprinzip: Wenn eure Komponente zu viele Dinge macht, spaltet sie.
- Wiederverwendbarkeit: Wenn ein Teil eurer Komponente woanders verwendet werden könnte, macht ihn zu einer eigenen Komponente.
- Komplexität: Wenn eure Komponente schwer zu verstehen wird, könnte es an der Zeit sein, sie zu teilen.
Denkt daran, Komponenten sind wie Lego-Steine - je modularer sie sind, desto flexibler wird eure Anwendung!
Fazit
Glückwunsch! Ihr habt den ersten großen Schritt in die Welt der React-Komponenten gemacht. Wir haben Funktionskomponenten, Klassenkomponenten, wie man sie erstellt und haben sogar die Komponentenzusammensetzung und das Aufteilen angerissen.
Denkt daran, das Beherrschen von React-Komponenten ist wie das Lernen eines Instruments - es erfordert Übung. Also lasst euch nicht entmutigen, wenn es nicht sofort klickt. Weiter codieren, weiter experimentieren, und bald werdet ihr wunderschöne React-Symphonien komponieren!
In unserer nächsten Lektion werden wir tiefer in Props und State eintauchen, das dynamische Duo, das eure Komponenten zum Leben erweckt. Bis dahin, viel Spaß beim Coden! ??
Credits: Image by storyset