Welches ist die korrekte Syntax für einen Button-Klick-Event-Handler foo?

Verständnis der korrekten Syntax für Button-Klick-Events in React

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.

  1. <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.

  2. <button onclick={this.foo}>: Aus dem gleichen Grund wie oben ist dies auch falsch.

  3. <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.

  4. <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.

Finden Sie das nützlich?