React: JavaScript-Library zum Erstellen interaktiver Benutzeroberflächen im Browser
Beispiel: vollständiger State einer Todo-Anwendung
{
"newTitleInput": "learn Rea",
"todos": [
{ "id": 1, "title": "laundry", "completed": true },
{ "id": 4, "title": "shopping", "completed": true },
{ "id": 7, "title": "gardening", "completed": false }
]
}
mögliches Erscheinungsbild einer Todo-Anwendung:
Beispiel: Komponentenstruktur einer Todo-Anwendung
Beispiel: Komponenten, State und Props in einer Todo-Anwendung
einfaches Codebeispiel mit State und JSX:
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<div>current count: {count}</div>
<div>
<button onClick={() => setCount(count + 1)}>
increment
</button>
</div>
</div>
);
}
Optionen:
gemeinsame Funktionalität:
Beispiel: slideshow-Komponente, die folgendes demonstriert:
Online-Version auf Codesandbox: https://codesandbox.io/s/slideshow-cn6m5
in App.js / App.tsx:
import Slideshow from './Slideshow';
// ...
return (
// ...
<Slideshow />;
)
import { useState } from 'react';
const baseUrl = 'https://picsum.photos/300/200?image=';
function Slideshow() {
const [img, setImg] = useState(0);
const imgUrl = baseUrl + img.toString();
function goToPrevImg() {
setImg(img !== 0 ? img - 1 : 0);
}
return (
<div>
<h1>Image {img}</h1>
<button onClick={() => setImg(0)}>start</button>
<button onClick={() => goToPrevImg()}>prev</button>
<img src={imgUrl} alt="slideshow" />
<button onClick={() => setImg(img + 1)}>next</button>
</div>
);
}
export default Slideshow;
function Slideshow() {
// ...
}
Eine Komponente wird als Funktion definiert, die einen XML-Baum zurückgibt
Die Funktion wird jedes Mal aufgerufen, wenn die Komponente (neu) gerendert werden muss
Komponentennamen beginnen immer mit einem Großbuchstaben
const [img, setImg] = useState(0);
Eine Komponente kann interne State-Einträge haben
useState
gibt bei jedem Rendering den aktuellen State-Eintrag und einen zugehörigen Setter zurück
const imgUrl = baseUrl + img.toString();
Ãœblicherweise wird der minimale State gespeichert
Weitere Werte (z.B. imgUrl
) können aus dem State abgeleitet werden
function goToPrevImg() {
setImg(img !== 0 ? img - 1 : 0);
}
Funktionen, die mit State interagieren, können innerhalb der Komponentenfunktion definiert werden
return (
<div>
...
</div>
);
Ein XML-Tag wechselt von JavaScript zu XML
<h1>Image {img}</h1>
Eine geschweifte Klammer wechselt zurück zu JavaScript
<button onClick={() => setImg(0)}>start</button>
<button onClick={() => goToPrevImg()}>prev</button>
<img src={imgUrl} alt="slideshow" />
<button onClick={() => setImg(img + 1)}>next</button>
Eventhandler können als JavaScript-Funktionen definiert werden