2016-08-22 4 views
0

Ich kann nicht die Elternkomponente aus der Kindkomponente neu übergeben - ich übergebe componentDidMount als Requisiten an Kindklasse, dann rufe ich es dort an und erwarte, dass das Elternteil neu zu rendern. Die Renderfunktion wird aufgerufen, der Inhalt bleibt jedoch unverändert. Was ist los mit dir?Elternkomponente von Kindkomponente aktualisieren

var Parent = React.createClass({ 
    getInitialState: function() { return {content: 'clean'}; }, 
    componentDidMount: function() { 
     this.setState({content: 'changed!'}); 
    }, 
    render: function() { 
     return React.createElement('div', {rerender: this.componentDidMount.bind(this)}, this.state.content); 
    } 
}); 

var Child = React.createClass({ 
    render: function() { 
     return React.createElement('div', {onClick: this.handleClick}, 'click me'); 
    }, 
    handleClick: function() { 
     this.props.rerender(); 
    } 
}); 

ReactDOM.render(
     React.createElement(ReactRouter.Router, {history: ReactRouter.browserHistory}, 
       React.createElement(ReactRouter.Route, {path: '/parent', component: Parent}) 
     ) 
, document.getElementById('content')); 
+0

Senden Sie eine Klassenmethode als prop Callback an die untergeordnete Komponente, der Callback muss 'setState' in der übergeordneten Komponente –

+0

Aber das ist genau das, was ich in meinem Beispiel – user99999

+1

nicht die' this.componentDidMount' als Event Callback verwendet habe :) Sie sollten eine eigene Funktion erstellen, um diesen 'rerder' in der Elternkomponente zu behandeln .. und natürlich wird es keinen Zufall geben, wenn die Elternkomponente mount den Zustand' content: changed' hat und wenn Sie mit click umgehen, wird sie aufgerufen die gleiche Funktion, so wird der Zustand gleich sein. – Hardy

Antwort

0

componentDidMount() ist eine Lebenszyklusfunktion, die aufgerufen wird, wenn die Komponente das Rendern abgeschlossen hat.

Aufruf es scheint, als ob Sie den gesamten Neuaufstellungsprozess umgehen.

Sie sollten stattdessen Ihre eigene Funktion erstellen.

changeContent: function() { 
     this.setState({content: 'changed!'}); 
    }, 

Und dann passieren changeContent()-rerender.

Vermeiden Sie im Allgemeinen die LifeCycle-Methoden von React!

0

Um all diese Dinge anzugehen, haben die Jungs von Facebook ein unidirektionales Datenflussmuster entwickelt. Ihre Kindkomponente sollte nichts über den Elternteil wissen, aber sie sollte einen Zustand ändern (Flux, Redux, Reflux). Änderungen am Status führen zu einem erneuten Rendering der übergeordneten Komponente.

Verwandte Themen