2016-07-08 4 views
2

Es gibt keine automatische Bindung in React ES6-Klassen. So haben Entwickler zwei Optionen, wie er kann, um den Kontext zu binden:Welche Methode des Bindungskontexts in React (ES6-Klassen) ist besser

1) Im Konstruktor

export class MyComponent extends React.Component { 
    constructor(props) { 
    super(props); 
    this.myFunction = this.myFunction.bind(this); 
    } 
    myFunction() { 
    // do something 
    } 
    render() { 
    return (
     <div onClick={this.myFunction}></div> 
    ); 
    } 
} 

2) Inline-Methode

export class MyComponent extends React.Component { 
    constructor(props) { 
    super(props); 
    } 
    myFunction() { 
    // do something 
    } 
    render() { 
    return (
     <div onClick={this.myFunction.bind(this)}></div> 
    ); 
    } 
} 

Welche Methode ist mehr produktiv zu arbeiten?

+0

Es ist eher eine Stilvorliebe, verwenden die meisten Menschen die erste Methode, da es den Code ein bisschen aufräumt –

+0

Vereinbarte mit @TylerIguchi ... Ich bevorzuge das erste für ein saubereres Aussehen, aber keines ist mehr "produktiv" – erichardson30

+0

Wenn Sie haben mehrere Listener, an die Sie eine Funktion binden, indem Sie '.bind (this)' direkt auf dem Element verwenden, kann mühsam und unübersichtlich werden. An diesem Punkt ist es besser, in der Konstruktorfunktion zu binden. Ich denke, es ist eine bessere Übung, im Konstruktor zu binden und nach diesem Standard zu gehen. –

Antwort

2

Ich empfehle Pfeilfunktion.

bind() ist nicht mehr notwendig.

+3

Das Problem dabei ist, dass eine neue Funktion jedes Mal erstellt wird, wenn die Komponente neu gerendert wird. Es wäre besser, im Konstruktor zu binden. –

+0

Sie haben Recht, ist dieses Problem so ernst, dass wir es nicht ignorieren können? Auf jeden Fall sollten wir, wie Sie sagen, mit der Leistung vorsichtig sein. –

1

Für Handlerfunktionen, wenn sie als normale Funktionen aufgerufen werden, bezieht sich dies auf globales Objekt. Dies geschieht bei Verwendung von ECMAScript 6-Klassen anstelle von React.createClass(), die unter der Haube automatisch gebunden werden. Zwei Ansätze können den Effekt der Bindung wie erwartet implementieren. Verwenden Sie zuerst die Syntax wie unten, um die Handler-Funktion explizit zu binden. Der andere Ansatz besteht darin, auf diese Weise die Handler-Eigenschaft der Komponente zu schreiben, ohne etwas zu binden.

<MyComponent onChange={() => this.handleChange()}><MyComponent /> 

In einer solchen Weise wird der Handler nur aufgerufen werden, wenn entsprechende Ereignis und zu diesem Zeitpunkt ausgelöst wird, welche die this bezieht sich auf die Komponenteninstanz, ist das, was wir es verweisen erwarten.

Beide Ansätze können funktionieren, entscheiden, welche zu verwenden ist Ihr Anruf.

Verwandte Themen