REAGIEREN
REAGIEREN
EINLEITUNG
React ist eine JavaScript-Bibliothek, die entwickelt wurde, um die Lösung für Frontend-Entwickler und mobile Apps zu werden, die auf
[Link] ist eine deklarative Bibliothek, die auf Komponenten basiert.
Erklärt, warum React das Entwickeln von Benutzeroberflächen (UI) erleichtert, indem es den Code lesbarer und einfacher macht.
da debuggare, progetare interfacce für jeden Zustand der Anwendung, so dass bei jeder Zustandsänderung React
wird nur die Teile der Benutzeroberfläche aktualisieren, die von diesen Daten abhängen.
I Komponenten sind ähnlich wie HTML-Tags, sie können Einzelkomponenten oder zusammengesetzt mit einer Baumstruktur erstellt werden.
Durch komplexe Benutzeroberflächen. Die Interaktionen und die Logik für die Komponenten sind in JavaScript implementiert, und das ermöglicht uns
leicht zu durchlaufen und auf komplexe Datenstrukturen an verschiedenen Punkten der Anwendung zuzugreifen, ohne sie speichern zu müssen
Informationen zum DOM.
Die ersten beiden Tags laden React. Das dritte lädt den Code der Komponente.
Die obigen Versionen sind nur für Entwicklungsumgebungen gedacht und sind nicht für Produktionsumgebungen geeignet.
Minifizierte und optimierte Versionen von Produktions-Reacts sind:
Stellen Sie sicher, dass das CDN, das Sie verwenden, den HTTP-Header Access-Control-Allow-Origin: * gesetzt hat:
Erstelle React-App
Erstelle React-AppEs ist eine komfortable Umgebung, um React zu lernen, und es ist der beste Weg, um anzufangen, eine zu bauen.
neue Anwendungeinseitigein React.
Esso konfiguriert die Entwicklungsumgebung so, dass die neuesten Funktionen von JavaScript genutzt werden können, und bietet
Eine Erfahrung in der Entwicklung und Optimierung der Anwendung für die Produktion.
Es wurde um die Installation von ... gebetenNode >= 8.10 und npm >= 5.6.
Um ein Projekt zu erstellen, führen Sie aus:
npx create-react-app mia-app
cdmia-app
npm starten
[Link]
[Link] ist ein beliebtes und leichtes Framework für statische und serverseitig gerenderte Anwendungen.
Reagieren. Enthält Lösungen für das Routing und die Anwendung von Stilen, erfordert die Nutzung [Link] Serverumgebung.
Gatsby
Gatsbyes ist der beste Weg, statische Seiten mit React zu erstellen, es ermöglicht die Verwendung von React-Komponenten, aber seine Ausgabe ist
besteht vollständig aus vorgerendertem HTML- und CSS-Code, um schnelle Ladezeiten zu gewährleisten.
Flexiblere Toolchains
Die folgenden Toolchains bieten mehr Auswahl und Flexibilität und werden für erfahrene Benutzer empfohlen:
NeutRinoeinschließlich eines Presets für dieReact-Anwendungene per iKomponentetReagieren.
Nxermöglicht die Entwicklung von Full-Stack-Monorepos mit integrierter Unterstützung für React, [Link],Ausdrücken, und anderes.
PaketEs ist ein schneller und konfigurationsfreier Anwendungsbauer, derfunktioniert mit React.
RazzleServer-Seitiges Renderierungs-Framework, das keine Konfigurationen benötigt und mehr Flexibilität bietet als
[Link].
In React müssen die Elemente einer Komponente ein einzelnes übergeordnetes Element haben, zum Beispiel:
<div> </div>
<h1> Hallo Welt</h1>
<div> </div>
<h2> Erstes Beispiel<h2>
In diesem Fall würde es einen Fehler geben. Wenn wir den vorherigen Code schreiben wollen, um mehr Elemente zurückzugeben,
korrekt und ohne das zweite Element im Elternelement div einzufügen oder ein anderes div zu erstellen, ist es möglich
avvolgerliin <[Link]>...</[Link]>che consente di restituire elementi multipli come
Ergebnis einer metodorender(), ohne ein zusätzliches DOM-Element erstellen zu müssen, um sie zu enthalten.
In pratica ist es möglich, die Elemente der Komponenten direkt in Javascript zu schreiben, denn JSX ist optional.
und nicht erforderlich, um React zu verwenden, da es dann in Javascript umgewandelt wird, aber es ist viel mehr
komfortabel, einfach und lesbar. Das Tool Babel konvertiert tatsächlich den JSX-Code in JavaScript, in Aufrufe zu
[Link], zum Beispiel:
Javascript-Code in JSX
Innerhalb von elementJSX ist es möglich, Javascript-Code (Ausdrücke, Variablen, Funktionen usw.) einzufügen
in Klammern {} beispielsweise fügen wir das Ergebnis des Aufrufs einer JavaScript-Funktion ein, in einem
elemento<h1>.
<h1> Hallo, {formatName(user)} </h1>
const user = {
Giuseppe
Verdi
};
funktion formatName(benutzer) {
return [Link] + ' ' + [Link];
}
[Link](element, [Link]('root'));
Wir sehen in diesem Beispiel, dass es möglich ist, Elemente zu erstellen und sie Variablen zuzuweisen;
Im Element wird in den geschweiften Klammern {} ein Aufruf einer JavaScript-Funktion ausgeführt, die die Daten von einem
Benutzerobjekt. Und schließlich wird das Element schließlich über den Namen der Variablen an das DOM weitergeleitet.
Es ist möglich, JSX innerhalb von if-Anweisungen, while-Schleifen, for-Schleifen zu verwenden, es Variablen zuzuweisen und es als Argument zu verwenden.
eine Funktion und es als Ergebnis einer Funktion zurückgeben.
Fügen Sie keine Anführungszeichen um die geschweiften Klammern hinzu, wenn Sie einen JavaScript-Ausdruck in ein Attribut einfügen.
Sie sollten entweder Hochkommata (für Zeichenfolgen) oder geschweifte Klammern (für Ausdrücke) verwenden, aber niemals beides gleichzeitig.
das gleiche Attribut.
React DOM verwendet die KonventioncamelCasebei der Zuweisung des Namens zu den Attributen anstelle der verwendeten
Normalerweise ändert sich im HTML der Name einiger Attribute, zum Beispiel wird das Attribut class zuKlassennamein
JSX etabindex wirdtabIndex.
Die React-Komponenten implementieren unmetodorender(), das Eingabedaten erhält und zurückgibt, was angezeigt werden soll.
datei [Link]
<div id="root"></div>
Datei html, die das Root-Tag enthält und das übergeordnete Element des DOM darstellt, wird in c0u65Zzzi umgeleitet.
Die gesamte Anwendung angezeigt.
Datei [Link]
Diese Datei enthält die Komponente Uhr
funktion Orologio() {
const oraMillisecondi = [Link]();
const ora = new Date(oraMillisekunden);
Rückgabe (
<p>{[Link]()}</p>
)
}
exportiere standard Orologio;
Die React-Bibliothek wird importiert, danach wird die Komponente Uhr durch eine Funktion erstellt.
[Link]() gibt die aktuelle Uhrzeit in Millisekunden zurück, danach wird ein Date-Objekt erstellt. Die Komponente gibt ein zurück.
Element p, in dem die Methode toLocaleTimeString() das Ergebnis im Format Stunden/Minuten/Sekunden anzeigt. Schließlich wird
der Komponent exportiert.
Datei [Link]
Funktion App() {
zurückgeben (
<div className ="App">
<h1>Aktuelle Uhrzeit</h1>
Uhr
</div>
)
}
Es ist die Elternkomponente der gesamten Anwendung, die alle Kindkomponenten importiert, in diesem Fall nur die Komponente.
Uhr und kehrt zur Struktur aller Komponenten der Anwendung zurück.
Wir sehen, dass die Komponente Uhr importiert wurde, diese kann in die Anwendung eingefügt werden durch eine
einfache Tag <Orologio/>.
Die Namen der Komponenten müssen immer mit einem Großbuchstaben beginnen, im Gegensatz zu JSX-Tags.
Datei [Link]
import React von 'react';
import ReactDOM von 'react-dom';
importiere App von './App';
funktion orario() {
[Link](<App/>, [Link]('root'));
}
setInterval(orario, 1000)
Dies importiert React, ReactDOM, die Datei der übergeordneten Komponente App.
[Link](component, wo umleiten)
Leitet die Komponente <App/> in die Wurzel des DOM im HTML um. Diese Komponente zeigt die aktuelle Uhrzeit an.
Statco, man muss die Seite aktualisieren, um die Updates zu sehen, deshalb wird die Weiterleitung eingefügt.
innerhalb einer Funktion, die mit setInterval() jede Sekunde aufgerufen wird. Bei jedem Aufruf der Funktion,
Der Komponenten wird jede Sekunde umgeleitet, und eine Eigenschaft von React ist, dass bei jeder Umleitung, wird
Der DOM wird mit dem vorherigen verglichen und es werden nur die Elemente geändert, die Modifikationen erfahren haben. In diesem
Der Fall wird sich nur in jedem <p></p> Element ändern, jede Sekunde, der Rest nicht.
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p> Prima App React </p>
</header>
</div>
);
}
}
<div className="App">
<h1>Aktuelle Uhrzeit</h1>
<Orologio fusoorario = "0"/>
<Orologio fusoorario = "6"/>
</div>
)
}
Wir sehen, dass die Eigenschaft fusoorario als ein Attribut deltag an die Komponente übergeben wird.
Funktion Orologio(props) {
const oraMillisecondi = [Link]() + [Link] * 3600 * 1000;
const ora = new Date(oraMillisecondi);
return (
<p> {[Link]()}</p>
)
}
exportiere Standard Orologio;
Die Funktionskomponente erhält die Parameter-Props. Zur aktuellen Zeit in Millisekunden wird die Zeitzone hinzugefügt.
von Props aufgerufen und in Millisekunden konvertiert (* 3600 * 1000).
In untag Komponenten können beliebig viele Props angegeben und dann im komponenten aufgerufen werden.
komm als Parameter immer nur Props) durch [Link].
Datei [Link]
importiere React aus 'react';
<p> {[Link]()}</p>
)
}
}
Wir können die Klasse entweder mit Component erweitern, indem wir es in React importieren, oder einfach mit
[Link]
Um die Props in der Klasse aufzurufen: wird die Methode constructor() definiert, vor der Methode render(), und darin wird
passaprops, die dann im metodosuper() definiert wird.
Um die Props in der Klasse (im render()-Methode) zu verwenden, verweist man auf sie mit:
[Link]
Die Methode getTime() ist eine Methode des Date-Objekts, ähnlich wie now(), die die aktuelle Zeit in Millisekunden zurückgibt.
Diese Klasse wird umgeleitet mit
[Link](<App/>, [Link]('root'));
Also kehrt die Uhr momentan statisch zurück (die Sekunden laufen nicht).
Eine Komponente führt in ihrem Lebenszyklus einige Methoden in der Reihenfolge aus. Diese Methoden haben die Aufgabe, den Zyklus zu verwalten.
die Lebensdauer einer React-Komponente und beginnen mit 'will', wenn sie ein Ereignis vorangehen, und 'did', wenn sie ihm folgen.
Ereignis.
Wir haben Zugang zu diesen Methoden, die wir verwenden können, um bestimmte Aktionen auszuführen, wenn eine Komponente...
erstellt, aktualisiert oder gelöscht oder sogar entscheiden, ob eine Komponente nachträglich geändert werden muss
Änderung von mindestens einer der Eigenschaften, die in ihrem Objekt State enthalten sind, oder beim Erhalt neuer Props.
Initialisierung einer Komponente (MONTAGE)
- Der Konstruktor ist die erste Methode, die für eine korrekte Initialisierung aufgerufen wird, Werte werden zugewiesen.
Standardmäßig werden alle Eigenschaften über das Objekt defaultProps definiert und das Objekt state wird somit initialisiert.
- Die zweite Methode, die aufgerufen wird, ist componentWillMount(), die aufgerufen wird, bevor die Komponente
werden umgeleitet (Render-Methode).
React empfiehlt, den Konstruktor anstelle dieser Methode für jede Initialisierung zu verwenden.
- render() ist die einzige obligatorische Methode, wenn man eine Komponente definieren möchte. Sie muss mindestens ein React zurückgeben.
Element oder null oder false, wenn wir nichts auf dem Bildschirm für diese Komponente anzeigen wollen. Es muss eine
reine Funktion, darf das Objektpropsostate nicht direkt ändern.
- ComponentDidMount() ist die Methode, die nach der Ausführung von render() aufgerufen wird. Dies ist die Methode, die verwendet werden sollte für
das DOM zu manipulieren oder um Daten von einem Server abzurufen.
-Die erste ist shouldComponentUpdate(), die die Argumente nextProps und nextState erhält.
repräsentieren den nächsten Wert des objektsPropse des objektsState und geben einen booleschen Wert zurück. Wenn falsch, i
Nachfolgende Methoden werden nicht aufgerufen, standardmäßig gibt es true zurück, was die Aktualisierung der Komponente ermöglicht.
Bei jeder Änderung von objStateeProps. Aus diesem Grund kann es verwendet werden, um festzustellen, ob die Komponente muss
Auf dem neuesten Stand mit den kommenden Werten von PropseState bleiben. Innerhalb dieser Methode ist es möglich, die Werte zu vergleichen.
der aktuellen State- und Props-Objekte mit denen von nextState und nextProps, wodurch entschieden werden kann, ob durchgeführt wird
Die Aktualisierung der Komponente.
-SeshouldComponentUpdate() stellt ein true resttuiscetrue dar, wird componentWillUpdate() aufgerufen. In dieser Methode ist es nicht
Einwilligung zur Änderung des Objekts State über [Link](), kann verwendet werden, um die Komponente vorzubereiten
bevor das Update des State-Objekts oder des Props-Objekts erfolgt.
-Nach der Methode render() wird componentDidUpdate() aufgerufen, das verwendet werden kann, um aktualisierte Daten herunterzuladen.
von einem Server oder um im DOM zu arbeiten.
componentDidMount() {
[Link] = setInterval([Link], 1000);
}
() => {
[Link]({
neues Datum()
});
}
Um ein Update des States durchzuführen, verwendet man die Methode setState(), die die Eigenschaften des States erhält, die aktualisiert werden müssen.
aktualisiert. In diesem Fall haben wir die Eigenschaft Zeit, aber wenn es weitere im Objekt [Link] gegeben hätte.
würden nicht in Betracht gezogen werden.
setState() vergleicht die Eigenschaften des Objekts, das es erhält, mit denen von [Link] und wenn sie geändert wurden,
Es wird überschrieben. In unserem Fall wird die Eigenschaft "orario" einfach mit einem neuen, aktuelleren Date() neu definiert.
setState() vergleicht mit dem, was in [Link] ist, und überschreibt es.
Auf diese Weise wird die Uhr jede Sekunde ausgelöst.
Lassen Sie uns zusammenfassen, was passiert und in welcher Reihenfolge die Methoden aufgerufen werden:
1 Wenn<Orologio/>an [Link]() übergeben wird, ruft React den Konstruktor der Komponente auf, die
Initialisieren Sie diesen Zustand mit einem Objekt, das die aktuelle Uhrzeit enthält. Danach wird dieser Zustand aktualisiert.
2 React ruft die Methode render() des Komponenten Orologio auf und erfährt, was angezeigt werden soll.
React kümmert sich um die Aktualisierung des DOM, sodass es mit der Renderausgabe übereinstimmt.
3 Wenn die Ausgabe der Renderisierung von Uhr in den DOM eingefügt wird, ruft React die Methode auf.
componentDidMount(). Darin wird ein Timer eingerichtet, der aktualisiereTempouna einmal pro Sekunde aufruft.
4 Jede Sekunde aktualisiert die Komponente Uhren die Benutzeroberfläche.
invocandosetState() mit einem Objekt, das die neue aktuelle Uhrzeit enthält. Mit dem Aufruf von asetState() wird React
Informiere dich darüber, dass sich der Zustand geändert hat und rufe erneut die Methode render() auf, um zu erfahren, was zu tun ist.
auf dem Bildschirm angezeigt. Diesmal wird [Link] in der Methode render() einen anderen Wert haben und die Ausgabe von
Die Renderisierung wird die aktualisierte Uhrzeit enthalten. React aktualisiert den DOM entsprechend.
Wenn die Komponente Uhr aus dem DOM entfernt werden sollte (UNMOUNTED), würde React die Methode aufrufen
componentWillUnmount()ed ist hier, wo wir den Timer abbrechen müssen, um die Operationen zu befreien.
Komponente, die im DOM demontiert wurde:
componentWillUnmount() {
clearInterval([Link]);
}
VERANSTALTUNGSVERWALTUNG
Die eventReact werden wie für das HTML deklariert, mit dem Unterschied, dass sie eine Syntax haben müssen:
{[Link]}
Nehmen wir das Beispiel der Uhr und fügen einen Knopf hinzu, der die Zeit stoppt und wieder startet.
Es ist notwendig, den Zustand der Komponente zu verwalten, und darin initialisieren wir eine Eigenschaft start: true:
[Link]
neues Datum()
start: true
}
Daher fügen wir im Rückgabewert von render() einen Button-Tag ein:
<button>Stop</button>
Um diesen Button zu nutzen, muss ein Ereignis eingefügt werden, das eine Funktion aufruft:
<button onClick={[Link]}>Stop</button>
Bis jetzt haben wir die Uhr so implementiert, dass sie startet, sobald die Komponente im DOM montiert ist.
den Intervall jede Sekunde in componentDidMount() und wir entfernen ihn in componentWillUnmount().
In diesem Fall muss mit dem Ereignis und der Funktion umgegangen werden, die aufgerufen wird, wenn:
- Die Uhr ist stehen geblieben, sie muss wieder in Gang gesetzt werden;
- Die Uhr ist NICHT angehalten, man muss sie anhalten, indem man sie auseinanderbaut.
Lass uns eine Methode start() erstellen, mit setInterval(), und rufen wir [Link]() in componentDidMount() auf.
Erstellen wir eine Methode stop(), mit clearInterval(), und rufen wir [Link]() in componentWillUnmount() auf.
Wenn man eine Klassenkomponente definiert, ist es üblich, eine Klassenmethode als Ereignis-Handler zu verwenden:
gestTime() {
[Link]((Zustand) => {
[Link] ? [Link]() : [Link]();
Uhr zurücksetzen.
Bindung
Die vorherige Methode führt jedoch in dieser Form zu einem FEHLER, da setState() nicht gelesen werden kann. Das liegt daran, dass
In JavaScript sind die Methoden der Klassen nichtassoziierendi default. Im Methode gestTime gehört this zu der Methode
Dasselbe, aber es wird nicht auf die Klasse verwiesen, also muss das Binding erfolgen, das heißt, die Methode muss mit der Klasse verbunden werden.
Die Bindung erfolgt über den Konstruktor() mit:
[Link] = [Link](this)
In unserem Fall:
[Link] = [Link](this);
Wenn wir jedoch viele Methoden haben, müssen wir dies für jede Methode im constructor() schreiben. Eine andere gleichwertige Möglichkeit.
steht darin, die Methode als Pfeilfunktion zu deklarieren:
() => {
[Link]((state) => {
[Link] ? [Link]() : [Link]();
![Link]
})
}
Das liegt daran, dass Arrow-Funktionen nicht das this implementieren, sodass in diesem Fall das this auf die Klasse verweist.
Wenn wir einen dynamischen Button wollen, der sich basierend auf dem Zustand ändert:
<button onClick = {[Link]}>{[Link] ? 'STOP' : 'START'}</button>
() => {
[Link]( {
neues Datum()
});
}
() => {
[Link]((state) => {
[Link] ? [Link]() : [Link]();
![Link]
})
}
start(){
[Link] = setInterval([Link], 1000);
}
stop(){
clearInterval([Link]);
}
componentDidMount() {
[Link]();
}
componentWillUnmount() {
[Link]();
}
const clocks = [
{
Italien
0
},
{
USA
-6
}
]
Um die Daten aus dem Array abzurufen und die Elemente <Orologio> dynamisch zu implementieren, erstellen wir im Komponenten
Klassifiziere eine Methode, die es verwaltet und die Anzahl der Elemente <Orologio> zurückgibt, wie viele Elemente vorhanden sind.
getUhren(){
Wir verwenden die Methode map(), die eine Funktion auf jedes Element anwendet, das sie vom Array erhält, das sie aufruft (clocks).
Dann rufen wir die Methode an dem Punkt auf, an dem die Elemente aufgezählt werden müssen, mit:
[Link]()
Auf diese Weise gibt die Methode getOrologi() einen Fehler zurück, da in React für jedes Element eines Arrays etwas erwartet wird.
ein einzigartiger Wert Schlüssel. So etwas wie eine ID, die React verwendet, um die Elemente zu unterscheiden, also können wir einen ID-Wert hinzufügen.
einzigartig oder einen Wert verwenden, von dem wir sicher sind, dass er für jedes Element einzigartig ist. In unserem Beispiel können wir verwenden
land
getOrologi(){
return [Link]((Uhr) => {
return <Orologiokey = {[Link]}paese = {[Link]} fusoorario = {[Link]}/>
})
}
Die Datei [Link] wird am Ende sein:
importiere React von 'react';
import Orologio von './Orologio';
const clocks = [
{
Italien
0
},
{
USA
fusoorario: -6
}
]
getUhren(){
return [Link]((uhr) => {
return <Orologio key = {[Link]} paese = {[Link]} fusoorario = {[Link]}/>
})
}
render() {
Rückgabe (
<div className="App">
<h1>Aktuelle Uhrzeit</h1>
{[Link]()}
</div>
)
}
}
REACT ROUTER
React Router ist eine Bibliothek, die es ermöglicht, React-Anwendungen mit mehreren Seiten zu erstellen, in denen der Übergang von einer
Die Seite und die andere geschieht dynamisch über Javascript, ohne die Seite jedes Mal neu laden zu müssen.
In React ist der Router nichts anderes als eine Komponente, die andere Komponenten routet.
Nelfile [Link] importiamo due Komponenten: BrowserRouter, den wir zur Vereinfachung Router nennen, und Route.
import {BrowserRouter as Router, Route} von 'react-router-dom';
Wir umhüllen die gesamte Komponente mit dem Element <Router> und einer Reihe von <Route>-Elementen, die in einem <div> eingeschlossen sind.
Die Glielemente <Route> haben ein Attribut path, das angibt, für welche URL eine bestimmte Komponente angezeigt werden soll.
<Router>
<div>
<Route exact path="/" component={Home} />
<Route strict path="/team/" render={() => <h1>Team</h1>} />
</div>
</Router>
In der Pratca-Route wird die URL gelesen und basierend darauf wird die Komponente umgeleitet.
Im ersten Element <Route> haben wir die Eigenschaft exact verwendet, um anzugeben, dass die Komponente angezeigt werden soll.
Zuhause nur, wenn der Wert des Attributs path gleich dem Wert der Eigenschaft [Link] ist. Wenn wir nicht hätten
react-router hätte das Home-Komponente auch für den Pfad "/team" angezeigt.
Im zweiten Element <Route> haben wir stattdessen das Attribut 'strict' verwendet, das sicherstellt, dass es nur einen Treffer gibt, wenn
[Link] ist genau gleich "\/team\/", nämlich nur wenn der abschließende Schrägstrich vorhanden ist.
<Route> kann auch andere Attribute empfangen: component, render, children. In allen drei Fällen werden sie an das
Komponente oder bei den Funktionen (render und children) die Eigenschaften history, location und match, die Objekte sind.
Die Eigenschaft 'components' gibt an, welche Komponente angezeigt werden soll, wenn ein Match vorliegt.
(Komponente, die für einen bestimmten Wert von [Link] angezeigt werden soll).
Wir können stattdessen die Proprenderse verwenden, wenn wir möchten, dass eine bestimmte Funktion aufgerufen wird.
Die Propchildren erhält auch eine Funktion, die jedoch immer ausgeführt wird.
Die Komponenten <Link> und <NavLink>
Definiere die Routen mit Route, lassen Sie uns sehen, wie man Links innerhalb der Anwendung hinzufügt, um von einer Seite zur anderen zu wechseln.
Um die Seite ohne Refresh des Browsers zu aktualisieren, verwenden Sie stattdessen die Tags <a href=""> (die Aufrufe durchführen.
AL-Server, die Seite neu ladend), des HTML, verwenden wir zwei Komponenten, Link und NavLink.
Die Komponente Link akzeptiert zwei Attribute: toche kann eine Zeichenfolge oder ein Objekt sein. Um zu verstehen wie
Das letzte funktioniert, wir müssen berücksichtigen, dass React Router den Verlauf der Seiten im Speicher behält.
visualisieren. Stellen wir uns die Chronologie wie einen Stapel vor, jedes Mal, wenn man eine Seite besucht, wird eine neue hinzugefügt.
Element zur Stapel. Wenn das Attribut replacedel des Link-Komponenten gleich true ist, wird das letzte Element des
pila anstelle von einem neuen hinzuzufügen.
Team exportieren
Innerhalb der Komponente Team fügen wir einen Link ein, der zur Adresse localhost:3000/stagionee führt und nicht entfernt wird.
Die Seite des Browsers neu laden.
NavLink ist eine besondere Version von Link. Es kann Eigenschaften wie activeClassName und activeStyle empfangen.
actveClassName="nomeClasse" da uno stile quando ein Link aktiv ist.
ConactveStyle können wir ein Objekt übergeben, durch das wir den Stil spezifizieren können, der angewendet wird.
alle NavLink-Elemente, wenn die aktuelle URL dem Wert des Attributs 'to' entspricht, d. h. wenn [Link] ist
gleich dem im Attribut 'to' angegebenen Pfad.
REINE FUNKTION
Eine reine Funktion ist eine normale Funktion mit zwei Eigenschaften:
1 Gegeben einer Menge von Eingaben muss die Funktion immer dasselbe Ausgabe zurückgeben.
2 Keine Nebenwirkungen.
Zum Beispiel ist eine Funktion die, die die Summe von zwei Zahlen zurückgibt.
Reine Funktionen geben eine stabile Ausgabe und sind deterministisch. Eine Funktion wird unrein, wenn sie ausführt
etwas anderes als seinen Rückgabewert zu berechnen.
VORTEILE
Mit Redux sind die Änderungen des Zustands einer Anwendung analysierbar und reproduzierbar, und es ist einfacher.
verstehen, wie man zu einer bestimmten Situation gekommen ist
Redux zwingt dazu, den Code gemäß einem spezifischen Muster zu organisieren, was indirekt eine definiert.
Standard der Codierung.
Es ist möglich, einen Anfangszustand zu definieren und die Anwendung von diesem Zustand aus zu starten, um dies zu erleichtern.
Rendering von JavaScript-Anwendungen vom Server aus
Es ist möglich, den Statusübergang sowohl für Debugging-Zwecke als auch zur Implementierung von Aktionen nachverfolgen.
INSTALLATION
Wenn wir [Link] verwenden, können wir Redux einfach mit dem folgenden Befehl installieren:
npm install --save redux
Der npm-Paketmanager lädt das Reduxe-Paket herunter und macht es verfügbar, um in der Anwendung importiert zu werden.
Wenn wir keine [Link]-Entwicklungsumgebung nutzen, können wir die Bibliothek immer [Link] von
distFordernvom npm-Paket und das Einfügen eines Verweises innerhalb der HTML-Seite der Anwendung
<script src="[Link]"></script>
In diesem Fall wird Redux als eine globale Variable [Link] zugänglich sein.
Der allgemeine Ablauf zur Änderung des aktuellen Status einer Anwendung folgt den folgenden Schritten:
1 wird eine Aktion identifiziert, möglicherweise erstellt durch einen Aktionsgenerator
2 taleActon wird an das Store über einen Dispatch gesendet
3 Innerhalb des Stores ersetzt ein Reducer den aktuellen Zustand durch den eventuell neu identifizierten Zustand.
basierend auf der Analyse von Acton
Geschäft
Der Store ist ein großes JavaScript-Objekt, das den aktuellen Zustand der Anwendung darstellt, und jedes Mal, wenn der Zustand
es wird aktualisiert, die Ansicht wird neu angezeigt.
Der gesamte Zustand der Anwendung befindet sich im Objektstore.
Der Store hat drei Methoden, um mit dem Rest der Architektur zu kommunizieren. Diese sind:
[Link]() um auf den aktuellen Zustand des Anwendungsbaums zuzugreifen.
[Link](action) um eine Statusänderung basierend auf einer Aktion auszulösen.
[Link](listener), um Änderungen im Zustand zu hören. Es wird jedes Mal aufgerufen, wenn
Eine Aktion wird gesendet.
[Link]
import { createStore } from "redux";
Jetzt werden wir Änderungen im Store anhören und dann mit [Link]() den aktuellen Zustand des Stores ausgeben.
[Link]( () => {
[Link]("Der Zustand hat sich geändert" + [Link]());
})
Acton/Acton Creators
Leacton sono semplici oggetti JavaScript che inviano informazioni dall'applicazione allo Store. Wenn Sie einen
Ein einfacher Zähler mit einer Erhöhungstaste, durch Drücken wird eine Aktion ausgelöst, die ähnlich ist
das hier:
{
INCREMENT
1
}
Der Zustand des Stores ändert sich nur als Reaktion auf eine Aktion. Jede Aktion muss eine Eigenschaft vom Typ (type) haben.
Beschreiben Sie, was die Aktion beabsichtigt zu tun.
Es wird empfohlen, die Aktion klein zu halten, da sie die Mindestmenge an Informationen darstellt, die erforderlich sind, um
Den Zustand der Anwendung verändern.
Im vorherigen Beispiel ist die Eigenschaft type auf "INCREMENT" eingestellt, und eine weitere Eigenschaft ist enthalten.
Payload, die in etwas Bedeutungsvolleres umbenannt werden könnte.
Während des Schreibens von Redux-Code werden normalerweise die Aktionen nicht direkt verwendet, sondern sie werden aufgerufen.
Funktionen, die die als Action Creator bezeichneten Aktionen zurückgeben.
Der Aktionscreator der vorherigen Increment-Aktion wird sein:
Um den Status des Zählers zu aktualisieren, müssen Sie die Aktion incrementCount wie folgt senden:
[Link](incrementCount(1));
Jetzt benötigen wir die Reducer, um die von der Aktion bereitgestellten Informationen zu konvertieren und den Zustand des Stores zu transformieren.
Reducer
Der Reducer (Regler) verwendet die Informationen der Aktionen, um den Zustand effektiv zu aktualisieren.
Ein Reducer sollte eine reine Funktion sein. Gegeben einen Satz von Eingaben, muss er immer die gleiche Ausgabe liefern.
Außerdem sollte er nichts weiter tun.
der Reduzierer für unseren Zähler.
Der Reducer erhält zwei Argumente: den Zustand und die Aktion, und gibt einen neuen Zustand zurück.
(vorherigerZustand, aktion) => neuerZustand
Der Zustand akzeptiert einen vordefinierten Wert, initialState, der nur verwendet wird, wenn der Wert des Zustands ist
undefiniert. Andernfalls wird der tatsächliche Wert des Staates einbehalten.
Wir verwenden den Schalter, um die richtige Aktion auszuwählen.
Fügen wir einen Fall für DECREMENT hinzu:
Wir haben gesehen, dass wir mit Redux die Aktionen senden und den neuen Zustand mit [Link]() abrufen.
[Link]().
Jetzt werden wir lernen, wie man einen Redux-Store mit React verbindet, mit der Bibliothek react-redux werden wir sehen
kommen:
1 die Containerkomponenten und die Präsentationskomponenten organisieren
Wie man React und Redux mit connect() verbindet
3Wie man Aktionen mit mapDispatchToProps versendet
Wie man den Zustand mit mapStateToProps wiederherstellt
Die Bibliothek exportiert nur zwei APIs, die man sich merken muss: eine Komponente <Provider/> und eine Funktion von
höhere Ordnung verbinden().
[Link](
<Provider store={store}>
<App />
</Provider>,
[Link]('root')
)
Wir wickeln den Anbieter um die Komponente der App, damit die Nachkommen der Komponente Zugriff haben.
ai dati.
Lass uns nun ein konkretes Beispiel für eine Telefonbuchanwendung mit den folgenden Eigenschaften ansehen:
. Alle Kontakte anzeigen
. einen neuen Kontakt hinzufügen
. Kontakt löschen
1) Verzeichnisstruktur
Erstellen Sie ein neues Projekt mit Create React App, installieren Sie Redux, Redux hat keine Ahnung, wie man die strukturieren kann.
Anwendung, daher ist der nächste Schritt, einige leere Verzeichnisse hinzuzufügen, um Redux zu organisieren:
Komponenten: Container- und dumme Komponenten in React, die nicht davon abhängen, ob Redux verwendet wird oder nicht.
containers:conterrá und componentsmart in React, die Aktionen an den Redux-Store senden. Die Assoziation zwischen
Redux und React werden hier stattfinden.
actons: die Acton-Schöpfer enthalten.
reducers: Jeder Reducer hat eine einzelne Datei, dieses Verzeichnis wird die gesamte Logik der Reducer enthalten.
store: enthält die Logik zur Initialisierung des Zustands und zur Konfiguration des Stores.
Dieses Strukturmodell heißt detoRailse und wäre gut für kleine und mittlere Anwendungen geeignet. Wenn die Anwendung wächst, kann
Es wäre bequemer, das Modellschema zu betrachten, bei dem jede Funktionalität ein eigenes Verzeichnis hat, und alles
Was diese Funktionalität betrifft, wird es innerhalb davon sein.
const initialState = {
contactList: [],
newContact: {
name
email
tel
}
}
Der Store hat zwei Eigenschaften: [Link] ist ein Array von Kontakten, während renewContact ein
Ein Objekt, das vorübergehend die Kontaktdaten enthalten wird, die über das Kontaktformular hinzugefügt werden.
4) Erstellung des Stores
Um den Store zu erstellen, importieren wir createStore aus redux in der Datei [Link]:
import { createStore } from 'redux'
dies erstellt den Speicher, der den Zustandbaum enthalten wird.
Lass uns den Store erstellen mit:
conststore = createStore(rootReducer, initaliState);
Wir stellen fest, dass es zwei Parameter erhält: den rootReducer und den anfänglichen Zustand initialState (optional)
Importiere das vorher erstellte initialState.
Die Reducer, die erstellt werden, müssen die Eigenschaften von combineReducers werden und müssen daher importiert werden.
fügen Sie denselben Namen der Eigenschaft des betreffenden Stücks des Staates ein
}
)
Und einmal erstellt, importieren wir es in die Datei [Link], um es an createStore zu übergeben.
[Link](
<Provider store={store}>
<App />
</Provider>,
[Link]('root')
)
nachdem mit
export default connect(mapStateToProps, null)(KontaktListe)
Wir übergeben contactsLists als Props an die dumme Komponente ContactList (importiert).
Der Container muss exportiert werden, da er dann importiert und in [Link] anstelle des verwendet werden muss.
dummes Komponent ContactsList, um angezeigt zu werden.
Auf diese Weise erhält die Komponente ContactsList als Props nur den Teil des States, den sie benötigt.
Ein Element, das es uns ermöglicht, im Browser relevante Informationen für das Surfen auf der Website zu speichern, ist
icookies. Aber das größte Problem mit den cookiesen ist, dass der Browser, um sich an die gespeicherten Informationen zu erinnern, muss
Statusnachrichten mit dem Server bei jeder neuen Seite, die der Benutzer besucht, austauschen; diese Funktion, insbesondere
Wenn es an Orten wie diesen möglich ist, Reisen oder Unterkünfte zu buchen, führt dies zu einer großen Verschwendung von Ressourcen, die hätten genutzt werden können.
setItem() akzeptiert zwei Parameter. Der erste ist der Index und ermöglicht es, später den Wert aufzurufen, der
Wir haben festgelegt, der zweite ist der tatsächliche Wert, den wir im Browser speichern möchten.
Questdaten können dann im Browser-Inspektor angezeigt werden.
Wir sehen, dass die Aktion, die von [Link]() ausgelöst wird, durch eine Reihe von Middleware läuft. Um sicherzustellen, dass die Aktion ...
wird an das nächste Middleware oder an den Reducer im Fall des letzten Middleware weitergeleitet, muss die Funktion aufgerufen werden.
next(acton) die von Redux an jedes Middleware übergeben wird.
In Redux sind sie besonders wichtig, weil sie den Punkt der Anwendung darstellen, an dem man ...
asynchrone Aktionen wie: API-Aufrufe, Timeout usw.
Eine wichtige Eigenschaft, wie im Bild zu sehen ist, ist, dass mehrere Middleware in Reihe geschaltet werden können.
und führt die Reihenfolge nacheinander aus.
Bei einem gestapelten Middleware-Chain wird bei einer Dispatch praktisch die erste aufgerufen.
Middleware. Im Allgemeinen wird ein Middleware überprüfen, ob die Aktion vom spezifischen Typ ist, der sie interessiert, ähnlich wie
Würde einen Reducer machen. Wenn es vom richtigen Typ ist, könnte es eine benutzerdefinierte Logik ausführen, andernfalls wird die Aktion weitergeleitet.
nächster Middleware im Stapel.
Im Gegensatz zu einem Reducer kann ein Middleware Nebenwirkungen enthalten, einschließlich Pausen und anderer Logik.
asynchrone
Zusammenfassend lassen sich die Parameter, die die Reaktion darstellen, jeweils als den aktuellen Zustand und die Handlung, über die wir sprechen, identifizieren.
Wird die Auftragsbearbeitung durchgeführt. Der Parameter next stellt die nächste Middleware in der Pipeline dar, bevor sie ankommt.
Alreducer. In pratica, all’interno di un Middleware können wir den aktuellen Store verwenden, um Aktionen auszuführen.
spezifische Bearbeitungen und dann den Ball an das nächste mögliche Middleware weitergeben.
Lass uns einen konkreten Fall sehen, wie ein Middleware implementiert werden kann, um die Aktion in die Konsole zu schreiben.
intercetata und der neue Status der Anwendung:
In diesem spezifischen Fall warten wir die Ausführung möglicher nachfolgender Middleware ab, bevor wir auf die Konsole schreiben.
Neuer Zustand. Wenn wir das nicht tun würden, würden wir den aktuellen Zustand erhalten, anstatt den nächsten.
Sobald das Middleware definiert ist, machen wir es für Redux verfügbar mit
Dies sorgt dafür, dass jeder Statusübergang in der Konsole des Browsers protokolliert wird:
Falls wir mehr Middleware haben, die vor dem Reducer ausgeführt werden soll, können wir sie als Parameter übergeben.
funzioneapplyMiddleware():
Die Ausführungsreihenfolge der Middleware erfolgt in der Reihenfolge, in der die Funktionen als Parameter übergeben werden.
adapplyMiddleware().
ASYNCHRONE ANRUFE MIT REACT REDUX
Lass uns jetzt sehen, wie man asynchrone Anrufe an einen Server mit React Redux durchführt.
Wir können einen lokalen Server mit json-server simulieren, der von Npm heruntergeladen werden kann, mit den zu servierenden json-Daten. Einmal
installiert, es muss die JSON-Datei erstellt werden, die bereitgestellt werden soll ([Link]) den Server starten mit:
json-server --watch [Link] --port3005--nc
Jetzt müssen wir unsere App verbinden, um die Daten von diesem Server zu lesen.
Am Ende haben wir synchrone Aktionen gesehen, bei denen das Payload-Objekt mit den Daten in den Store ging, aber in diesem Fall die Daten
Sie werden auf dem Server gespeichert, daher muss ein asynchroner Aufruf an den Server getätigt werden, um die Daten abzurufen.
Um asynchrone Anrufe zu verwalten, verwendet React Middleware, um die Arbeit zu erleichtern, gibt es verschiedene Pakete, einschließlich
redux-promise-middleware. Dies ermöglicht die Verwaltung von asynchronen Action Creators, mit dem Unterschied, dass in diesem
Im Fall erhält die Payload ein Promise:
const asyncAction = () => ({
VERSprechen
neues Versprechen(…)
})
Gibt eine Aktion mit einer asynchronen Payload, wandelt die Middleware die Aktion in eine ausstehende Aktion oder eine Aktion um
erfüllt/abgelehnt, was den Status der asynchronen Aktion darstellt.
Nachdem das Paket heruntergeladen wurde, muss es im Index importiert und an den Store übergeben werden:
Um mit dem Server zu kommunizieren, verwenden wir fetch() oder andere Pakete, die eine Verwaltung der Anfragen ermöglichen.
asynchrone basierend auf den Versprechungen
REACT-HOOKS
Sie wurden mit React 16.8 eingeführt und sind praktisch Funktionen, die es ermöglichen, einen Zustand in Komponenten einzufügen.
tpo Funktion, einfacher als die Klassenmethode.
useState()
Um einen Zustand zu einem Funktionskomponenten zu hinzufügen, verwenden Sie useState, das zuerst importiert werden muss von
React. useState ist eine Funktion, die definiert wird mit:
const[variabile, setVariabile] = useState(initalValue);
oder,Diese gibt ein Paar von Werten zurück: den aktuellen Statuswert und eine Funktion, die erlaubt zu
aktualisieren (dispatch)
Es ist ähnlich wie [Link] von einer Klasse.
Der einzige Parameter von useState ist sein anfänglicher Zustand.
useEffect()
Sagt React, dass die Komponente nach dem Rendering etwas tun soll. React wird die übergebene Funktion merken und die
Er wird später anrufen, nachdem er die Updates ausgeführt hat, bei jeder Änderung.
Er führt die gleichen Aufgaben aus: componentDidMount, componentDidUpdate und componentWillUnmount.