2017-08-30 2 views
0

Ich würde gerne eine Funktion beim Empfang von Requisiten zunächst und bei jeder nachfolgenden Requisiten Änderungen ausführen. Folglich plante ich, Requisiten zu prüfen und diese Funktion sowohl in componentDidMount als auch in componentWillReceiveProps auszuführen. Dies scheint jedoch überflüssig zu sein. Ich habe Leute gesehen, die auch Requisiten überprüfen und Funktionen innerhalb von render() ausführen, aber ich hatte den Eindruck, dass dies verpönt war.(React) Run Methode auf Requisiten ändern, einschließlich der ursprünglichen Requisiten

Was sollte meine Lösung hier sein?

+2

Haben Sie Ihre erste Methode versucht? Das Hinzufügen zu "componentDidMount" und "componentWillReceiveProps" mag etwas überflüssig erscheinen. Aber das sind wahrscheinlich die beiden Rettungsringe, die am ehesten dem gesuchten Verhalten ähneln, also benutze sie. –

+0

sentComponentUpdate/componentWillUpdate wird vor jedem Render-Zyklus aufgerufen, – TimCodes

+0

Ich glaube nicht, dass 'componentWIllUpdate' vor dem ersten Rendern aufgerufen wird: https://facebook.github.io/react/docs/react-component.html#componentwillupdate –

Antwort

2

Es gibt keinen Ersatz, um sowohl componentDidMount als auch componentWillReceiveProps in einem einzigen Callback abzufangen. Der beste Weg, dies zu tun, ist eine Funktion zu definieren und sie von beiden Callbacks aufzurufen.

ich Requisiten auf die Überprüfung und Ausführen dieser Funktion

Ist eine sehr vage Beschreibung dessen, was Sie zu tun versuchen wollte. Nur die Requisiten zu überprüfen scheint nicht problematisch zu sein, wenn sie innerhalb der render Funktion ausgeführt werden. Aber es würde ein Problem werden, wenn dieser Teil Nebenwirkungen verursacht, die wiederum eine erneute Wiedergabe von Komponenten auslösen können. Wenn dies der Fall ist, würde ich sagen, "verpönt" ist es leichtfertig. Das Problem dabei ist, dass Ihre Renderfunktion Nebeneffekte hinzufügt, die wiederum mehr Rendern auslöst und weiter geht. Es wird die Leistung Ihrer App sofort zunichtemachen und sogar die ganze Sache zum Stillstand bringen.

0

Ihre Frage ist sowohl mit React als auch mit Redux getagged. Verwenden Sie eine mapStateToProps-Funktion, die Sie mit connect verwenden?

Wenn ja, könnte eine mögliche Antwort sein, diese Aktion zu senden (oder diese Funktion auszuführen) in der Funktion mapStateToProps, da diese sowohl zu Beginn als auch bei jeder Aktualisierung des Redux-Status ausgeführt wird. Sie müssen sicherstellen, dass die Aktion/Funktion keine weitere Zustandsänderung verursacht, so dass Sie in einer Schleife landen.

Bearbeiten: @DuncanThacker wies darauf hin, dass dies keine gute Idee sein könnte, weil sehr oft feuern kann, was zu Leistungsproblemen führt. Guter Punkt.

+1

Ich empfehle das nicht. Es ist gefährlich, Dinge in mapStateToProps() zu tun, da es sehr häufig feuern und unangenehme Leistungsprobleme verursachen kann. –

+0

@DuncanThacker Ja, das scheint eine vernünftige Sorge zu sein. Wird meine Antwort bearbeiten. Vielen Dank! – jonahe

Verwandte Themen