React
Formulare und Benutzereingaben
Suche…
Kontrollierte Komponenten
Kontrollierte Formularkomponenten werden mit einer value definiert. Der Wert der kontrollierten Eingaben wird von React verwaltet. Benutzereingaben haben keinen direkten Einfluss auf die gerenderten Eingaben. Eine Änderung der value Eigenschaft muss stattdessen diese Änderung widerspiegeln.
class Form extends React.Component {
constructor(props) {
super(props);
this.onChange = this.onChange.bind(this);
this.state = {
name: ''
};
}
onChange(e) {
this.setState({
name: e.target.value
});
}
render() {
return (
<div>
<label for='name-input'>Name: </label>
<input
id='name-input'
onChange={this.onChange}
value={this.state.name} />
</div>
)
}
}
Das obige Beispiel zeigt, wie die value Eigenschaft den aktuellen Wert der Eingabe definiert und der onChange Ereignishandler den onChange der Komponente mit der Benutzereingabe aktualisiert.
Formulareingaben sollten nach Möglichkeit als kontrollierte Komponenten definiert werden. Dadurch wird sichergestellt, dass der Komponentenstatus und der Eingabewert jederzeit synchron sind, auch wenn der Wert durch einen anderen Trigger als eine Benutzereingabe geändert wird.
Unkontrollierte Komponenten
Unkontrollierte Komponenten - Eingänge, die keinen haben value Eigenschaft. Im Gegensatz zu kontrollierten Komponenten ist es die Aufgabe der Anwendung, den Komponentenstatus und den Eingangswert synchron zu halten.
class Form extends React.Component {
constructor(props) {
super(props);
this.onChange = this.onChange.bind(this);
this.state = {
name: 'John'
};
}
onChange(e) {
this.setState({
name: e.target.value
});
}
render() {
return (
<div>
<label for='name-input'>Name: </label>
<input
id='name-input'
onChange={this.onChange}
defaultValue={this.state.name} />
</div>
)
}
}
Hier wird der Status der Komponente ebenso wie bei kontrollierten Komponenten über den onChange Ereignishandler aktualisiert. Anstelle einer value Eigenschaft wird jedoch eine defaultValue Eigenschaft angegeben. Dies bestimmt den Anfangswert der Eingabe während des ersten Renderns. Nachfolgende Änderungen des Zustands der Komponente werden vom Eingabewert nicht automatisch übernommen. Wenn dies erforderlich ist, sollte stattdessen eine kontrollierte Komponente verwendet werden.