2016-09-04 3 views
1

Ich habe eine reagieren Komponente:Aufruf der Methode auf dem obersten Ebene reagiert Komponente

var Main = React.createClass({ 
    handleFoo: function() { 
    self.setState(...); 
    }, 
    ... 
}) 

ich mache es mit:

var top = ReactDOM.Render(<Main />, document.getElementById("x")) 

Und dann später erhalte ich Daten von einer externen Quelle, und ich möchte Interaktion mit der Top-Level-Komponente, also habe ich versucht:

top.handleFoo() 

Aber ich bekomme

TypeError: top.handleFoo is not a function 

Was ist der richtige Weg, um mit der obersten Reaktionskomponente von außerhalb der Komponentenhierarchie zu interagieren?

+0

Ich denke, Ihre Syntax ist korrekt. Was bekommst du, wenn du 'console.log (top .__ proto __)' '. –

Antwort

0

Was genau versuchen Sie zu tun?

Datenübergabe in der Regel zu Reagieren erfolgt props mit:

var data = /* get your data from this external source */ 
ReactDOM.Render(<Main mydata={data} />, document.getElementById("x")) 

Hier bekommen wir einige Daten, und es zu unserer Hauptkomponente als Stütze genannt mydata vorbei.

Aus unserer Komponente können wir die Requisiten verwenden wir so empfangen:

var Main = React.createClass({ 
    handleFoo: function() { 
    var mydata = this.props.mydata; 
    /* do what you want with data */ 
    self.setState(...); 
    }, 
    ... 
}) 

Bitte beachten Sie, dass, wenn Sie die Daten, die Sie Main passieren aktualisieren möchten, würden Sie es wieder machen müssen, wenn Sie wollen um zu vermeiden, dass Sie entweder die Daten von der Komponente abrufen oder den Anwendungsstatus mithilfe von redux und react-redux verwalten können.

Gibt es einen Grund, warum Sie die Daten nicht innerhalb der Komponente selbst abrufen?

+0

Der Grund, warum ich die Daten nicht aus der Komponente heraushole, ist, dass ich mit dem Elektron arbeite und versuche, auf ein Ereignis von einem nativen Menüelement zu reagieren. Der Grund, warum ich eine Methode für mein reactive Element aufrufen möchte, ist, dass ich das Element der obersten Ebene habe, das den größten Teil des Status im Moment behält, und wenn ich Props verwende, dann muss ich den gesamten Status aus der obersten Ebene verschieben. Level-Komponente und in freie Funktionen, die wie Overkill scheint. Der spezifische Anwendungsfall ruft "handleNew" auf, wodurch eine neue Notiz in den Stammkomponenten state.notes erstellt wird. –

+0

Ich verstehe. Nun, soweit ich weiß (und ich kann falsch liegen), bietet react keine Option dafür: Kommunikation von Elternteilen zu ihren Kindern kann über Requisiten erfolgen, die Kommunikation von Kindern zu Eltern kann mit Hilfe einer Elternfunktion erfolgen wird über Requisiten an die Kinder weitergegeben. Für etwas anderes, normalerweise die Lösung ist "Redux" - eine große und einfache Javascript-Bibliothek für die Verwaltung der Anwendung Zustand, die eingehakt werden kann in reagieren Komponenten mit Hilfe der Hilfs Bibliothek 'react-redux'. Ich denke, das ist die beste Lösung für Sie. –

0

Alle Statusänderungen sollten innerhalb der Komponente vorgenommen werden. Es gibt zwei Arten von externen Komponenten, die mit der Klasse interagieren: Parent und Peer. Elternkomponenten können ihren Status ändern, indem sie neue Requisiten senden. Peer-Komponenten sollten den Status mithilfe von Ereignissen ändern.

Verwandte Themen