2016-12-02 3 views
0

reagieren: Ich bin zu reagieren und js brauche ich einige Präzisierungen in Komponenten von Methoden Bindungkeine Methode Argument Requisiten nicht von Kind Komponente aufgerufen in

I 2 Komponenten Parent und ChildComponent haben

Eltern

var ParentComponent = React.createClass({ 

methodArg: function (value) { 
    console.log("methodArg called", value); 
}, 

methodNoArg: function() { 
    console.log("methodNoArg called"); 
}, 

render: function() { 
    return <ChildComponent m1={(value) => this.methodArg(value)} m2={() => this.methodNoArg} /> 
} 

}) 

Kind

var ChildComponent = React.createClass({ 
render: function() { 
    return (
     <div> 
      <button onClick={()=>this.props.m1(100)}>Call M1</button> 
      <button onClick={()=>this.props.m2()}>Call M2</button> 
     </div> 
    ) 
} 
}) 

Wenn ich klicke Anruf M1 Knopf, methodArg() des Elternteils wird aufgerufen.

Aber wenn ich Anruf klicken M2methodNoArg() nicht genannt zu werden. Was ist das Problem dabei?

Als ich methodNoArg zu Kind übergeben, wird es

<ChildComponent m1={this.methodArg()} m2={this.methodNoArg} /> 

Aber methodArg() heißt immer den Knopf, ohne klicken, seine immer jedes Mal aufgerufen genannt wurden, wenn das Kind Komponente gerendert wird.

+0

Sie vermissen '()' 'nach this.methodNoArg' -' this.methodNoArg' Zeiger wieder auf 'function', Sie haben es immer noch – pwolaq

Antwort

0
<button onClick={()=>this.props.m1(100)}>Call M1</button> 

Ihre obige Zeile sagt bewerten die m1 Verfahren und weist das Ergebnis onClick. Wenn Sie also Ihre Seite aktualisieren, wird die console.log-Anweisung mit dem übergebenen Wert gedruckt, aber sie wird nie wieder aufgerufen, egal wie oft Sie auf die Schaltfläche klicken, da onClick jetzt keine Methode zugewiesen ist.

Sie können erreichen, was Sie wollen, indem Sie die Klammer entfernen, die die Methode automatisch aufruft, ohne zu klicken.

Hier jsfiddle Code-Link funktioniert: http://jsfiddle.net/fp0LvkLg/

+0

Pfeilfunktion ist nur eine Art zu binden. {this.props.m1.bind (this, 100)} ist dasselbe wie {() => this.props.m1 (100)}. in deinem jsfiddle Code. Versuchen Sie, Bind zu entfernen und zu überprüfen. Die Methode m1 wird aufgerufen, bevor auf die Schaltfläche geklickt wird. John

+0

überprüfen Sie diese http://jsfiddle.net/john1jan/nu6ydt09/1/ – John

+0

Sie haben Recht, es gibt einen vernachlässigbaren Unterschied zwischen pfeil und bind, außer du kannst den pfeil nicht mit neuen n paar mehr benutzen. Aber in Ihrem oben genannten Fall sind Sie nicht verbindlich, wenn ich richtig überprüfe. – Vikas

1

Dies ist wegen der Art und Weise Sie Ihre Methode, um eine Stütze

ist (Art, wenn wir auslassen, die Feinheiten der this) entspricht

m2={function() {return this.methodNoArg}}

So

m2={() => this.methodNoArg}

zuweisen Ihre Stütze ist eine Funktion, die eine Funktion zurückgibt, die wiederum nie aufgerufen wird.

Sie wollen einfach Ihre Funktion einer Stütze wie folgt vergeben:

m2={this.methodNoArg}

+0

aufrufen aber Ich rufe die Methode m2 so in kind rechts this.props.m2(). Was ist Methodenaufruf? – John

+0

Sie meinen, dass es eine Funktion einer Funktion gibt, die nur Methodenobjekt zurückgibt. Wenn ich this.props.m2() aufrufen, gibt dies this.methodNoArg zurück, aber ruft methodNoArg nicht auf? – John

+0

Ja, das ist, was passiert – Mchl

Verwandte Themen