React restitue-t-il tous les composants et sous-composants à chaque setState
appel?
Si oui, pourquoi? Je pensais que l'idée était que React rendait aussi peu que nécessaire - lorsque l'état changeait.
Dans l'exemple simple suivant, les deux classes s'affichent à nouveau lorsque vous cliquez sur le texte, malgré le fait que l'état ne change pas lors des clics suivants, car le gestionnaire onClick définit toujours state
la même valeur:
this.setState({'test':'me'});
Je m'attendais à ce que les rendus ne se produisent que si les state
données avaient changé.
Voici le code de l'exemple, en tant que JS Fiddle et extrait de code intégré:
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()
même avec des données factices entraîne un rendu différent de l'élément, je dirais donc oui. Absolument, il devrait essayer de restituer votre objet lorsque quelque chose a changé, sinon votre démo - en supposant que c'était le comportement prévu - ne fonctionnerait pas!
shouldComponentUpdate
méthode, dont j'ai supposé qu'une version simple devait déjà être incluse dans React lui-même. On dirait que la version par défaut incluse dans react renvoie simplement true
- ce qui force le composant à être rendu à chaque fois.