Reagieren Staat Von Grund auf

0
85

Wie Sie beginnen zu lernen, zu Reagieren, dann werden Sie konfrontiert werden, zu verstehen, was Staat ist. Zustand ist von enormer Bedeutung, zu Reagieren, und vielleicht auch ein großer Grund, warum Sie geschaut haben, in der Verwendung Reagieren in den ersten Platz. Lassen Sie uns einen Stich an Verständnis, was Staat ist und wie es funktioniert.

Was ist der Staat?

Der Staat Reagieren, ist ein plain-JavaScript-Objekt , können Sie im Auge behalten eine Komponente Daten. Der Zustand einer Komponente ändern können. Eine änderung in den Zustand einer Komponente hängt von der Funktionalität der Anwendung. Änderungen können, basierend auf Benutzer-Reaktion, neue Nachrichten von server-side -, Netzwerk-Antwort oder nichts.

Komponentenstatus wird erwartet, dass die privaten auf die Komponente und kontrolliert von der gleichen Komponente. Änderungen an einer Komponente Zustand, die Sie haben, um Sie in der Komponente — die Initialisierung und Aktualisierung der Komponente Zustand.

Klasse Komponenten

Staaten ist nur für Komponenten, die als Komponenten von Klassen. Der Hauptgrund, warum Sie verwenden möchten, werden die Komponenten von Klassen über Ihr Gegenstück, funktionelle Komponenten, dass die Komponenten von Klassen können einen Status haben. Lassen Sie uns den Unterschied sehen. Funktionelle Komponenten sind JavaScript-Funktionen, wie diese:

const App = (Requisiten) => {
return (
<div>
{ dies.Requisiten }
</div>
)
}

Wenn die Funktionalität, die Sie benötigen, die von der Komponente ist so einfach, wie die eine oben, dann eine funktionale Komponente ist die perfekte Passform. Eine Klasse Komponente Aussehen wird viel komplexer als das.

Klasse App erweitert Reagieren.Komponente {
Konstruktor(props) {
super(Requisiten)
diese.state = { username: ‘johndoe’ }
}
render() {
const { username} =.Zustand
return(
<div>
{ username }
</div>
)
}
}

Oben, ich bin Einstellung, die den Zustand der Komponente Benutzernamen in einen string.

Der Konstruktor

Laut der offiziellen Dokumentation des Konstruktors ist der richtige Ort, um zu initialisieren Zustand. Status “Initialisierung” erfolgt durch Einstellung dieser.Zustand auf ein Objekt, wie Sie oben sehen können. Denken Sie daran: der Staat ist ein einfaches JavaScript-Objekt. Der ursprüngliche Zustand des App-Komponente festgelegt wurde, um ein state-Objekt enthält die Schlüssel username Wert johndoe mit dieser.state = { username: ‘johndoe’ }.

Die Initialisierung einer Komponente Staat kann so Komplex wie das, was Sie hier sehen können:

Konstruktor(props) {
super(Requisiten)
diese.state = {
currentTime: 0,
status: false,
btnOne: false,
todoList: [],
name: ‘John Doe’
}
}

Der Zugriff Auf State

In einem initialisierten Zustand zugegriffen werden kann, die in der render () – Methode, wie ich oben.

render() {
const { username} =.Zustand
return(
<div>
{ username }
</div>
)
}

Eine alternative zu den oben genannten snippet:

render() {
return(
<div>
{ dies.Zustand.username }
</div>
)
}

Der Unterschied ist, dass ich extrahiert den Benutzernamen aus Staat, in dem ersten Beispiel, aber es kann auch geschrieben werden als const status =.Zustand.Benutzername. Dank ES6 destructuring, ich habe nicht diese Strecke zu fahren. Lassen Sie sich nicht verwirren, wenn Sie die Dinge so zu sehen. Es ist wichtig zu wissen, dass ich nicht Neuzuweisung der Staat wenn ich das getan habe. Die erste Einrichtung des Staates war in den Konstruktor, und sollte nicht wiederholt werden – nie-update-Komponente Staat direkt.

Ein Staat kann zugegriffen werden, mithilfe dieser.Zustand.property-Namen. Vergessen Sie nicht, dass, abgesehen von dem Punkt, wo Sie initialisiert die Ihr Zustand, wenn Sie das nächste mal diese zu nutzen.Zustand ist, wenn Sie Zugriff auf den Staat.

Aktualisierung Stand

Der einzige zulässige Weg, um zu aktualisieren Sie eine Komponente im Zustand ” mittels setState(). Mal sehen, wie das funktioniert praktisch.

Zuerst werde ich beginnen mit der Erstellung der Methode, die aufgerufen wird, um die Komponente aktualisieren, Benutzername. Diese Methode sollte erhalten, ein argument, und es wird erwartet, dass argument zum update der Staat.

handleInputChange(username) {
diese.setState({username})
}

Wieder einmal, können Sie sehen, dass ich übergeben Sie in Objekt setState(). Mit diesem fertig ist, werde ich brauchen, um passieren Sie diese Funktion, um die event-handler, der aufgerufen wird, wenn der Wert einer Eingabe-Feld geändert wird. Der event-handler geben, der Kontext des Ereignisses, das ausgelöst wurde, was es möglich macht, erhalten Sie den Wert im Eingabefeld eingegebene Ereignis mithilfe.Ziel.Wert. Das ist das argument übergeben handleInputChange () – Methode. Also, der render-Methode sollte so Aussehen.

render() {
const { username} =.Zustand
return (
<div>
<div>
<input
type=”text”
Wert={das.Zustand.username}
onChange={event => diese.handleInputChange(event.Ziel.Wert)}
/>
</div>
<p>Ihr Benutzername, {username}</p>
</div>
)
}

Jedes mal, wenn setState() aufgerufen wird, wird eine Anforderung gesendet, um Reagieren zu aktualisieren Sie den DOM mit dem neu aktualisierten Zustand. Mit dieser Denkweise macht Sie verstehen, dass Status-update verzögert werden können.

Die Komponente sollte so Aussehen;

Klasse App erweitert Reagieren.Komponente {
Konstruktor(props) {
super(Requisiten)
diese.state = { username: ‘johndoe’ }
}
handleInputChange(username) {
diese.setState({username})
}
render() {
const { username} =.Zustand
return (
<div>
<div>
<input
type=”text”
Wert={das.Zustand.username}
onChange={event => diese.handleInputChange(event.Ziel.Wert)}
/>
</div>
<p>Ihr Benutzername, {username}</p>
</div>
)
}
}

Das bestehen der Staatlichen als Requisiten

Ein Staat übergeben werden können, wie Requisiten aus einem übergeordneten auf die untergeordnete Komponente. Um dies in Aktion zu sehen, erstellen Sie nun eine neue Komponente für das erstellen einer To-Do-Liste. Mit dieser Komponente wird ein Eingabefeld für die täglichen Aufgaben und die Aufgaben übergeben werden, die als Requisiten, um die untergeordnete Komponente.

Versuchen Sie, erstellen Sie die übergeordnete Komponente auf eigene, mit den Lektionen, die Sie gelernt haben, so weit.

Beginnen wir mit der Erstellung der Initialen Zustand der Komponente.

Klasse App erweitert Reagieren.Komponente {
Konstruktor(props) {
super(Requisiten)
diese.state = { todoList: [] }
}
render() {
return()
}
}

Die Komponente Staat hat seine todoList legen Sie ein leeres array. In der render () – Methode, die ich zurückgeben möchte, ein Formular für die Einreichung von Aufgaben.

render() {
const { todoList } =.Zustand
return (
<div>
<h2>Geben Sie Ihre to-do</h2>
<form onSubmit={das.handleSubmit}>
<label>Todo-Element</label>
<input
type=”text”
name=”todoitem”
/>
<button type=”submit”>Submit</button>
</form>
</div >
)
}

Jedes mal, wenn ein neues Element eingetragen ist, und der submit-button geklickt wird, wird die Methode handleSubmit aufgerufen wird. Diese Methode wird verwendet, um zu aktualisieren, der den Status der Komponente. Die Art und Weise, die ich es aktualisiert werden soll, ist die Verwendung concat, um den neuen Wert in die todoList array. So tun, setzen Sie den Wert für die todoList innerhalb der setState () – Methode. Hier ist, wie diese Aussehen sollten:

handleSubmit = (event) => {
event.preventDefault()
const Wert = (Ereignis.Ziel.Elemente.todoitem.Wert)
diese.setState(({todoList}) => ({
todoList: todoList.concat(Wert)
}))
}

Die Veranstaltung ist der Kontext erhalten jedes mal, wenn der submit-button geklickt wird. Wir verwenden Ereignis.preventDefault() zum beenden der Standard-Aktion, der Vorlage würde die Seite neu laden. Der eingegebene Wert in das Eingabefeld zugeordnet ist, eine variable namens Wert, was dann passiert ist ein argument, wenn todoList.concat() aufgerufen wird. Reagieren updates den Zustand der todoList durch hinzufügen neuer Wert, um die ersten leeren array. Dieses neue array wird der aktuelle Stand der todoList. Wenn ein anderes Element wird Hinzugefügt, wird der Zyklus wiederholt.

Das Ziel hierbei ist pass das einzelne Element zu einem untergeordneten Komponente als Requisiten. Für dieses tutorial, wir nennen es die TodoItem-Komponente. Fügen Sie das code-snippet unten innerhalb des übergeordneten div, die Sie haben in der render () – Methode.

<div>
<h2 ” >Ihre todo-Listen enthalten:</h2>
{ todoList.map(i => <TodoItem-item={i} /> )}
</div>

Sie sind mit anzeigen, um eine Schleife durch die todoList array, was bedeutet, dass das einzelne Element wird dann an die TodoItem-Komponente als Requisiten. Diese zu nutzen, müssen Sie ein TodoItem-Komponente erhält, dass die Requisiten und rendert es auf der DOM. Ich werde Ihnen zeigen, wie Sie dies tun, indem Sie funktional und Klasse Komponenten.

Geschrieben als eine funktionale Komponente:

const TodoItem = (Requisiten) => {
return (
<div>
{props.ein Element,}
</div>
)
}

Für die Klasse Komponente, es wäre:

Klasse TodoItem erstreckt Reagieren.Komponente {
Konstruktor(props) {
super(Requisiten)
}
render() {
const {Element} =.Requisiten
return (
<div>
{Element}
</div>
)
}
}

Wenn es keine Notwendigkeit zu verwalten, die in dieser Komponente, sind Sie besser dran mit der funktionellen Komponente.

Levelt

Sie werden-handling-Status sehr oft während der Entwicklung Reagieren Anwendung. Mit all den Bereichen, die oben beschrieben wird, sollten Sie das Vertrauen haben, in der Lage, Tauchen Sie ein in den erweiterten Teil der staatlichen Verwaltung im Reagieren. Tiefer Graben, ich empfehle Reagieren die offizielle Dokumentation über Zustand und Lebenszyklus sowie Uber die Reagieren Guide auf Requisiten vs Staat.