Eine der häufigsten Aufgaben in der webbasierten Programmierung ist das Aufzeichnen von Benutzerinteraktionen, z.B. Klicks auf verschiedene UI-Elemente wie Schaltflächen. In React, einer beliebten JavaScript-Bibliothek für den Aufbau von Benutzerschnittstellen, gibt es spezielle Event-Handler-Syntaxen, um solche Benutzeraktionen zu behandeln.
Die Frage verlangt die korrekte Syntax für einen Button-Klick-Event-Handler namens foo
. Bevor wir zur korrekten Antwort kommen, betrachten wir die gegebenen Optionen und erläutern, warum sie korrekt oder falsch sind.
<button onclick={this.foo()}>
: Dies ist falsch, da React-Event-Handler in JSX Code in CamelCase geschrieben werden sollten, daher sollte onclick
als onClick
geschrieben werden.
<button onclick={this.foo}>
: Aus dem gleichen Grund wie oben ist dies auch falsch.
<button onClick={this.foo()}>
: Dies ist auch falsch. Obwohl onClick
korrekt in CamelCase geschrieben wurde, wird die Methode this.foo()
sofort beim Rendern der Komponente aufgerufen und nicht, wenn auf die Schaltfläche geklickt wird.
<button onClick={this.foo}>
: Dies ist die korrekte Antwort. Hier ist sowohl onClick
korrekt in CamelCase geschrieben als auch der EventHandler this.foo
wird nur ausgeführt, wenn ein Klick-Event ausgelöst wird.
Betrachten Sie zum Beispiel den folgenden Code, der einen Button in React darstellt und einen Klick-EventHandler foo
hat:
class MyComponent extends React.Component {
foo() {
console.log('Button wurde geklickt!');
}
render() {
return (<button onClick={this.foo}>Klick mich!</button>);
}
}
Wenn die Schaltfläche "Klick mich!" geklickt wird, wird die Funktion foo
ausgeführt und 'Button wurde geklickt!' wird in der Konsole protokolliert.
Wichtig zu beachten ist, dass in den meisten Fällen, insbesondere wenn Sie auf den Zustand der Komponente zugreifen möchten, Sie die Methode im Konstruktor an this
binden müssen. Wenn Sie beispielsweise die Methode foo
wie folgt ändern:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.foo = this.foo.bind(this);
}
foo() {
console.log('Button wurde geklickt!');
}
render() {
return (<button onClick={this.foo}>Klick mich!</button>);
}
}
Durch das Binden unserer Methode an this
im Konstruktor können wir sicherstellen, dass this
innerhalb unserer Methode foo
auf unsere Komponenteninstanz zeigt.