2016-11-02 2 views
1

Ich muss ein Stück Code ausführen, nachdem alle Enkel einer Komponente gerendert wurden, um zu einem der Enkelkinder zu scrollen. Die Struktur sieht wie folgt aus:Callback reagieren, um zu blättern, nachdem alle Kinder gerendert wurden

`<GrandParent> 
    <IntermediateParent> 
    <IntermediateParent2> 
     <GrandChild/> 
     <GrandChild/> 
     <GrandChild/> 
     <GrandChild/> 
    </IntermediateParent2> 
    </IntermediateParent> 
</GrandParent>` 

Die Render-Methode von GrandParent wie folgt aussieht:

render() { 
    if (!this.props.listOfGrandchildren) { // still loading data from server 
    return <div>LOADING...</div> 
    } 

    return <IntermediateParent grandchildren={this.props.listOfGrandchildren} /> 
} 

Es ist klar, dass ComponentDidMount mit eindeutig nicht wegen der Kinder arbeiten zu einem späteren Zeitpunkt angebracht ist, nachdem die Daten vom Server geladen wurden. In diesem Fall CDM von GrandParent würde vor CDM jeden GrandChild

ausgelöst werden könnte ich eine Methode, von oben nach jedem GrandChild überliefern, die auf CDM genannt werden würden. Auf GrandParent würde ich darauf warten, dass alle GrandChild diese Methode aufrufen, indem Sie einen Zähler verwenden, und sobald der Zähler gleich der Anzahl der Enkelkinder wäre, könnte ich meinen Code aufrufen, der zum gewünschten Enkelkind blättern würde, aber das fühlt sich sehr an Ärger.

Ich möchte die GrandParent laden, bevor die Daten vom Server herunterkommt, um ein Platzhalter/Ladeelement zu rendern. Ich suche eine elegantere Methode, um das zu lösen.

UPDATE: Is componentDidMount of parent called after all componentDidMount of children?

Ich weiß, warum mein GrandChild CDM ren nach CDM von GrandParent nur ausgelöst wird, sucht ein anderes Verhalten

Antwort

0

Am Ende haben die saubere Lösung wurde der folgende:

Ich habe ComponentDidMount auf IntermediateParent eingerichtet (funktioniert auch mit IntermediateParent2), die einen Aktionsersteller aufruft, der ein Flag loadedX = true setzt.

Dann in GrandParent 's ComponentWillReceiveProps warten Sie auf die loadedX prop zu werden wahr. Rufen Sie in diesem Fall manuell die gewünschte Rückruffunktion auf. Ich injiziere die loadedX Stütze zu GrandParent unter Verwendung connect.

Hoffe das hilft auch jemand anderem. Wenn Sie weitere Informationen benötigen, fragen Sie in den Kommentaren. Ich kann auch etwas Code für ein realeres Beispiel finden.

Verwandte Themen