React-Projekt 04.04
===================
1. Einleitung
--------------
Der erste Versuch unseres DVA-Praktikums führte uns in die Grundlagen von React JS ein.
Unser Ziel war es, eine einfache HTML-Seite zu erstellen, die die Benutzer zur Eingabe eines Benutzernamens und Passworts auffordert.
Hierbei lag der Fokus darauf, die grundlegenden Konzepte von React JS zu verstehen und anzuwenden.
Motivation, Aufgabenstellung
`````````````````````````````
Die Motivation für diesen Versuch lag darin, ein Verständnis für die Funktionsweise von React JS zu entwickeln,
einer der führenden JavaScript-Bibliotheken für den Aufbau benutzerfreundlicher Webanwendungen.
Die Aufgabenstellung bestand darin, eine Benutzeroberfläche zu erstellen, die die Eingabe von Benutzerinformationen
ermöglicht und die Grundlagen von React JS nutzt.
2. Grundlagen
--------------
.. image:: img/react-logo.PNG
:scale: 20%
([Abb.1]_): React Logo
Was ist React?
``````````````
React ist eine JavaScript-Bibliothek zur Entwicklung von Benutzeroberflächen. Sie ermöglicht die Erstellung von benutzerdefinierten Webanwendungen mit einer komponentenbasierten Architektur. React wurde von Facebook entwickelt und erstmals im Jahr 2013 veröffentlicht. Seitdem hat es sich zu einem der beliebtesten Frameworks in der Webentwicklung entwickelt und wird von einer großen Community unterstützt.
Architektur von React
`````````````````````
Die Architektur von React basiert auf dem Konzept der komponentenbasierten Entwicklung. Eine React-Anwendung besteht aus einer Hierarchie von Komponenten, die jeweils eine spezifische Funktionalität implementieren. Jede Komponente besteht aus einer
'render()-Methode, die JSX (JavaScript XML) verwendet, um die Struktur der Benutzeroberfläche zu definieren. Mehr zu React kann man in der Dokumentation ([REACT1]_) oder in dem Tutorial ([REACT2]_) nachlesen.
Komponenten und JSX
```````````````````
In React werden Benutzeroberflächen durch die Verwendung von Komponenten erstellt. Eine Komponente kann eine einfache Funktion oder eine Klasse sein, die JSX verwendet, um die Darstellung der Benutzeroberfläche zu definieren. JSX ist eine Syntaxerweiterung von JavaScript, die es ermöglicht, HTML-ähnliche Strukturen direkt in JavaScript-Code einzubetten.
Zustand und Props
`````````````````
React verwendet das Konzept von "Props" (Eigenschaften) und "State" (Zustand), um Daten zwischen Komponenten zu übertragen und den Zustand der Anwendung zu verwalten. Props sind Parameter, die von Elternkomponenten an ihre Kindkomponenten übergeben werden, während der Zustand von einer Komponente intern verwaltet wird und sich während der Lebensdauer der Komponente ändern kann.
Routing
```````
Für die Navigation zwischen verschiedenen Ansichten und Komponenten in einer Single-Page-Anwendung können Sie in React eine Routing-Bibliothek wie React Router verwenden. Diese ermöglicht es, URLs mit bestimmten Komponenten zu verknüpfen und die Anwendungszustände zu verwalten.
.. code-block:: html
}>
}>
3. Versuchsdurchführung
------------------------
Vorbereitung
`````````````
Installation von Node.js und npm zur Verwaltung von Paketen.
.. code-block::
sudo apt install nodejs
Erstellung eines neuen React-Projekts mit Create React App.
.. code-block::
npx create-react-app
Erstellung einer Komponente für das Benutzerformular.
Konfiguration der Zustandsverwaltung für Benutzereingaben.
Implementierung der Validierung für Benutzername und Passwort.
Styling der Benutzeroberfläche mit CSS.
Durchführung
`````````````
Implementierung der Komponenten für das Benutzerformular unter Verwendung von JSX.
Festlegung des Zustands der Benutzereingaben und Aktualisierung bei Änderungen.
Implementierung der Validierungslogik, um sicherzustellen, dass Benutzername und Passwort korrekt eingegeben werden.
Testen der Benutzeroberfläche durch Eingabe von verschiedenen Benutzernamen und Passwörtern.
Ergebnisse
```````````
Wir konnten erfolgreich eine HTML-Seite erstellen, die es Benutzern ermöglicht, ihren Benutzernamen und ihr Passwort einzugeben.
Die Benutzeroberfläche war ansprechend gestaltet und reagierte dynamisch auf Benutzereingaben.
Die Validierung funktionierte wie erwartet und gab Fehlermeldungen aus, wenn ungültige Informationen eingegeben wurden.
.. code-block:: javascript
async function submitHandler(event){
event.preventDefault();
const form = document.getElementById("form");
if(!usernameInputRef.current || !passwordInputRef.current || !form){ //error handling
return;
}
const username = usernameInputRef.current.value //getting username from input form
const password = passwordInputRef.current.value //getting password from input form
form.reset();
try{ // fetching username and password from database
const response = await fetch(`${dataBaseUrl}/users/${username}.json`);
const user = await response.json();
if(!user){ //checking if user exists
throw(new Error());
}
if(user.password === password){ //checking if given password matched database password
setMessage("User:" + username + " logged in!");
}else{
throw(new Error());
}
}catch(error){ // error handling
setMessage("Wrong password or username");
}
}
Probleme
`````````
Am Anfang hatten wir Probleme, das React-Projekt einzurichten. Wir mussten die richtigen Pakete und Programme in der richtigen Version herunterladen.
Schwierigkeiten ergaben sich bei der Datenbank. Wir benutzen die Firebase Realtime Database von Google. Zu Demonstrationszwecken wollten wir, dass jeder in die Datenbank schreiben und Daten aus ihr lesen kann. Dazu mussten wir die richtigen Policies aktivieren.
Außerdem hatten wir Probleme mit Git, da wir für das erste Projekt auf einem Branch bestanden und es manchmal zu Merge-Konflikten kam.
4. Zusammenfassung
-------------------
In diesem Versuch haben wir die Grundlagen von React JS kennengelernt und angewendet, um eine einfache Benutzeroberfläche zu erstellen.
Wir konnten die Funktionsweise von Komponenten, Zustandsverwaltung und Validierung verstehen und anwenden.
Fazit, Tipps für spätere Teams
```````````````````````````````
Verbringen Sie genügend Zeit mit der Einarbeitung in die Grundlagen von React JS, insbesondere in Bezug auf Komponenten und Zustandsverwaltung.
Lesen Sie die offizielle React-Dokumentation und suchen Sie nach Tutorials, um sich mit bewährten Methoden vertraut zu machen.
Nehmen Sie sich Zeit für das Debuggen und die Fehlerbehebung, insbesondere bei der Implementierung komplexerer Funktionen wie Validierung.
Außerdem wäre es sinnvoll, mehrere Branches für das Projekt zu erstellen, damit es bei den Commits nicht zu Kollisionen kommt.
.. _lit:
5. Literaturangaben
-------------------
.. [REACT1] React Documentation:
https://reactjs.org/docs/getting-started.html
.. [REACT2] React Tutorial von React Docs:
https://reactjs.org/tutorial/tutorial.html
**Abbildungen:**
.. [Abb.1] : Quelle: https://de.m.wikipedia.org/wiki/Datei:React-icon.svg