React tüm bileşenleri ve alt bileşenleri her seferinde yeniden oluşturur mu? setState
çağrıldığında mu?
Öyleyse neden? Fikrin, React'in sadece gerektiği kadar az bir hale getirildiğini düşündüm - devlet değiştiğinde.
Aşağıdaki basit örnekte, onClick işleyicisi her zaman state
aynı değere ayarlandığından, sonraki tıklatmalarda durumun değişmemesine rağmen, metin tıklatıldığında her iki sınıf da yeniden oluşturulur :
this.setState({'test':'me'});
Oluşturma işlemlerinin yalnızca state
veriler değişmiş olsaydı gerçekleşmesini beklerdim.
JS Fiddle ve gömülü snippet olarak örneğin kodu :
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()
kukla verilerle bile çağrıldığında , öğenin farklı bir şekilde görüntülenmesine neden olduğundan, evet diyebilirim. Kesinlikle bir şey değiştiğinde nesnenizi yeniden oluşturmaya çalışmalıdır, aksi takdirde demo - amaçlanan davranış olduğunu varsayarak - işe yaramaz!
shouldComponentUpdate
yönteminizi yazmanızı gerektirdiği gibi , bunun basit bir versiyonunun zaten React'in içine dahil edilmesi gerektiğini varsaydım. Reaksiyona dahil edilen varsayılan sürüm basitçe geri döner true
- bu da bileşeni her seferinde yeniden oluşturmaya zorlar.