2016-05-04 12 views
0

Ich muss eine nicht-triviale Berechnung als Teil meiner Implementierung von . Ich muss auch die gleiche Berechnung als Teil der render Implementierung durchführen. Ich würde gerne das Ergebnis der Berechnung in shouldComponentUpdate erfassen und in meiner render Implementierung wiederverwenden können - d. H. Ich möchte vermeiden, denselben Wert zweimal zu berechnen.Reagieren - erfassen intermediate in sollteComponentUpdate

Gibt es eine empfohlene Möglichkeit, dies zu implementieren?

+0

Vielleicht sollte es ein Teil der Komponente Zustand sein? –

+0

Ist 'shouldComponentUpdate' erlaubt den Status der Komponente zu ändern? Ich weiß technisch, dass es kann, aber ich bin mir nicht sicher, dass es sollte. Außerdem kann 'this.state' überschrieben werden, wenn Sie es' render'. –

+0

Keine Antwort, aber wenn die Berechnung nicht-trivial ist, warum brauchen Sie sie in 'shouldComponentUpdate()'? Die Idee hinter 'shouldComponentUpdate' ist eine zusätzliche Überprüfung, ob Rendering ausgeführt werden muss, um zusätzliche Leistung zu erzielen. Aus funktionaler Sicht ist 'shouldComponentUpdate' nicht notwendig. Streng genommen könnte man sagen, dass 'shouldComponentUpdate' nur triviale Berechnungen enthalten sollte. – wintvelt

Antwort

1

Der beste Weg, dies zu tun, ist wahrscheinlich Ihren eigenen setState() Wrapper in Ihrer Komponente wie zu definieren:

setMyState(newProps, newState) { 
    var nonTrivialResult = doStuff(newProps, newState); 
    newState.checkSum = nonTrivialResult; 
    this.setState(newState); 
} 

Und Anruf Diese neue Methode, wo immer Sie anrufen würden setState(), und auch von componentWillReceiveProps.

Der Wrapper hat Zugriff auf alle aktuellen Requisiten und den Status sowie auf alle neuen Requisiten und den Status, den Sie übergeben. Auf diese Weise sollten Sie in der Lage sein, beliebige Berechnungen durchzuführen.

Möglicherweise müssen Sie auch doStuff() von getInitialState() für die erste Runde anrufen.

In diesem Setup wird Ihre Berechnung nur einmal bei jedem Rendervorgang durchgeführt. Und Sie können das Ergebnis in shouldComponentUpdate() überprüfen.

Im Lebenszyklus reagieren wird shouldComponentUpdate() nach componentWillReceiveProps() genannt, so sollte diese Arbeit ..

0

Können Sie es bei componentWillReceiveProps behandeln und den Zustand dort mit dem berechneten Ergebnis aktualisieren? (Sorry soll dies eher wie ein Kommentar sein, aber ich habe nicht genug rep)

+0

Das würde für ein "Requisiten" -Update funktionieren, aber nicht für ein "Status" -Update. –

Verwandte Themen