Rendert React bei jedem setState
Aufruf alle Komponenten und Unterkomponenten neu ?
Wenn ja warum? Ich dachte, die Idee war, dass React nur so wenig wie nötig rendert - wenn sich der Zustand ändert.
Im folgenden einfachen Beispiel werden beide Klassen erneut gerendert, wenn auf den Text geklickt wird, obwohl sich der Status bei nachfolgenden Klicks nicht ändert, da der onClick-Handler state
den Wert immer auf denselben Wert setzt:
this.setState({'test':'me'});
Ich hätte erwartet, dass das Rendern nur stattfinden würde, wenn sich die state
Daten geändert hätten.
Hier ist der Code des Beispiels als JS-Geige und eingebettetes Snippet:
var TimeInChild = React.createClass({
render: function() {
var t = new Date().getTime();
return (
<p>Time in child:{t}</p>
);
}
});
var Main = React.createClass({
onTest: function() {
this.setState({'test':'me'});
},
render: function() {
var currentTime = new Date().getTime();
return (
<div onClick={this.onTest}>
<p>Time in main:{currentTime}</p>
<p>Click me to update time</p>
<TimeInChild/>
</div>
);
}
});
ReactDOM.render(<Main/>, document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.0/react-dom.min.js"></script>
[1]: http://jsfiddle.net/fp2tncmb/2/
setState()
selbst mit Dummy-Daten dazu führt, dass das Element anders gerendert wird, also würde ich ja sagen. Auf jeden Fall sollte es versuchen, Ihr Objekt neu zu rendern, wenn sich etwas geändert hat, da sonst Ihre Demo - vorausgesetzt, es war das beabsichtigte Verhalten - nicht funktionieren würde!
shouldComponentUpdate
Methode schreiben , von der ich angenommen habe, dass eine einfache Version bereits in React selbst enthalten sein muss. Klingt so, als würde die in reag enthaltene Standardversion einfach zurückkehren true
- wodurch die Komponente jedes Mal neu gerendert werden muss.