Starten mit React
Da ich nun auch mal wieder in die Web-Entwicklung mit einsteigen wollte, habe ich mir erst mal angeschaut, welche Wege es nun gibt. Dabei ist mir Angular JS und React vor die Füße gelaufen. Nach längerem ausprobieren, hab ich mich nun für React entschieden, da mir dort die Vorgehensweise einfach besser gefällt.
Vorbereitung
Um ein Unterstützung durch Highlighting und IntelitiySense zu bekommen, hab ich mir zuerst Visual Studio Code installiert und zusätzlich noch NodeJS, mit welchen React am angenehmsten zu Entwickeln ist. Bei NodeJS benutze ich die aktuelle und nicht die LTS Version. Und damit das erzeugen der Projekte einfacher von der Hand geht, hab ich gleich das Packet “create-react-app” installiert:
npm install -g create-react-app
Projekt erstellen
Mit create-react-app wird die Projektmappe erstellt und es kann direkt die erste Oberfläche betrachtet werden:
create-react-app example-app
cd example-app
npm start
Nach kurzem kompilieren wird der Webbrowser geöffnet und direkt auf die Website navigiert. npm kann mit [Strg]+[C] unterbrochen werden, dies muss noch mit [j] bestätigt werden. Danach können wir nun weitere notwendige Packet installieren. Die Installation wird immer mit folgende Befehl, bei dem man im Hauptverzeichnis des Projektordners stehen muss, durchgeführt:
npm install --save <packet(e)>
Hierbei wird dem npm gesagt das er die angegebenen Packet installieren soll, sowie die Packete in der package.json zu hinterlegen sind. Dadurch kann man jederzeit den Zustand der Packete wieder herstellen.
Meine verwendeten Packete
Packetname | Beschreibung |
---|---|
[bootstrap@4.0.0-beta][p1] | Bootstrap selbst für die CSS-Dateien |
[reactstrap][p2] | Implementierung von Klassen für direkte Verwendung in React |
react-addons-transition-group | Wird von reactstrap als mit zu installieren definiert |
react-addons-css-transition-group | Wird von reactstrap als mit zu installieren definiert |
react-router-dom | Darüber werden die Urls und ihre Darstellungen definiert, wenn mehr als eine Seite benötigt wird |
react-loadable | Zum zerteilen der Javascript-Dateien, damit beim Start nicht mehr alles geladen wird |
[react-icons][p3] | Vielerei an Icons fürs Web, hier noch ein [Icon-Viewer][p4] zum ermitteln welche vorhanden sind |
Proxy wegen CORS
Für die Datenbeschaffung wird hier häufig mit RESTfuly Anfragen gearbeitet. Diese sind nicht immer mit in der Website integriert, sondern werden oft von anderen Stelle her konsumiert. Dabei reicht schon ein anderer Port auf dem gleichen Computer und man landet in einem CORS-Fehler.
Damit diese Probleme für den einen REST-Dienst nicht auftritt, kann man im Webpack einen Proxy einrichten. Die Einstellungen werden in der package.json, die im Wurzelverzeichnis zu finden ist, auf der ersten Ebene direkt hinterlegt, z.B:
{
"name": "example-app",
"version": "0.1.0",
...
"proxy": ...
}
Alle folgenden Angaben, beziehen sich auf den Eintrag “proxy”, der entsprechend belegt wird.
Single-Proxy
Der einfachste Weg ist es, alle Anfragen die von der React-Seite nicht bearbeitet werden an den Proxy zu schicken. Dafür wird die Url des Proxy direkt angegeben, und es wird die komplette Url der Anfrage direkt am Proxy angefragt:
"proxy": "http://example.com:12345",
Bei dieser Konfiguration würde eine Anfragen an den eigenen Server in dieser Form “http://ownserver/api/v1/view/component” an dem Proxy-Server in dieser Form überstetzt werden: “http://example.com:12345/api/v1/view/component".
URL per Proxy
Um es etwas weiter zu spezifieren, kann man auch Url-Präfixe angeben, die explizit an den Proxy weitergeleitet werden. Dafür wird der Präfix und das Ziel angegeben:
"proxy": {
"/api": {
"target": "http://example.com:12345",
"ws": true
}
}
In diesem Fall werden nur noch Anfragen die mit “/api” beginnen an den Proxy weitergeleitet, dabei bleibt die URL ebenso gleich wie beim “Single Proxy”.
Projekt verwalten
Nach dem nun das Projekt erstellt wurde und alle notwendigen Packete installiert sind, wird das Projekt nun im Visual Studio Code über Datei -> Ornder öffnen geöffnet. Nach dem öffnen werden uns 3 Ordner und ein paar Dateien erscheinen:
Modul | Beschreibung |
---|---|
node_module | Hierhin werden alle lokal installierten Packet abgelegt, welche über den “import”-Befehl eingebunden werden können |
public | Hier liegen die statischen Elemente, wie z.B. die index.html. Alles was direkt in der Index.html eingebunden werden soll, muss in diesem oder einem Unterordner gelegt werden |
src | Hier liegen die eigentlichen Quellen, die später die Anwendung definieren. Die noch zu erstellenden Unterordner sind eine häufig zu findene Konvention |
src/components | In sich abgeschlossene Komponenten, für wiederkehrendes oder für Trennung von Hauptbestandteilen. Hier könnten z.B. Sidebar oder der Header liegen |
src/containers | |
src/views | Die Ansichten im Hauptfenster, die durch unterschiedliche URLs angesteuert werden können |
Private Packete
Zum Gliedern von Elementen kann man diese in Unterordner packen und mit einer “package.json”-Datei versehen, damit wird beim Import in den anderen Dateien nur noch der Unterordner angeben und alles weitere wird über die package.json definiert. Hier ein Beispiel einer solchen Datei:
{
"name": "Sidebar",
"version": "0.0.0",
"private": true,
"main": "./sidebar.jsx"
}
In diesem Fall wird das Packet mit den Namen “Sidebar” betitelt und liegt in der Verison 0.0.0 vor. Der Parameter private sorgt dafür, dass diese Packet nur innerhalb des Projektes verwendet wird. Und welche Datei als Einstieg benutzt werden soll, wird über “main” definiert, was in diesem Fall die sidebar.jsx ist.
Vorlage Themes
- http://coreui.io/demo/React_Demo/#/
- https://getbootstrap.com/docs/3.3/examples/dashboard/
- http://vinceg.github.io/Bootstrap-Admin-Theme/index.html#
FAQ (oder Bootstrap und seine Tücken)
Fixed Header liegt über den Body
Damit bei einem Fixed Header der Content nicht hinter dem Header steht, muss am umschließenden Div bzw. Body vom Nav und Content ein “padding-top” von “50px” eingetragen.