Czy React ponownie renderuje wszystkie komponenty i komponenty podrzędne przy każdym setState
wywołaniu?
Jeśli tak, to dlaczego? Pomyślałem, że pomysł polegał na tym, że React renderował tak mało, jak to konieczne - gdy stan się zmienia.
W poniższym prostym przykładzie obie klasy są renderowane ponownie po kliknięciu tekstu, pomimo faktu, że stan nie zmienia się przy kolejnych kliknięciach, ponieważ program obsługi onClick zawsze ustawia state
tę samą wartość:
this.setState({'test':'me'});
Spodziewałbym się, że renderowanie nastąpi tylko w przypadku zmiany state
danych.
Oto kod przykładu, jako skrzypce JS i osadzony fragment:
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()
nawet z fałszywymi danymi powoduje, że element renderuje się inaczej, więc powiedziałbym „tak”. Absolutnie powinien spróbować ponownie renderować obiekt, gdy coś mogło się zmienić, ponieważ w przeciwnym razie demo - zakładając, że było to zamierzone zachowanie - nie działałoby!
shouldComponentUpdate
metody, która, jak zakładam , musi być zawarta w React. Wygląda na to, że domyślna wersja zawarta w React po prostu zwraca true
- co zmusza komponent do ponownego renderowania za każdym razem.