Чи React повторно відтворює всі компоненти та допоміжні компоненти щоразу, коли setState
викликається?
Якщо так, то чому? Я подумав, що ідея полягає в тому, що React надається лише так мало, як потрібно - коли стан змінюється.
У наступному простому прикладі обидва класи відображаються знову при натисканні на текст, незважаючи на те, що стан не змінюється при наступних клацаннях, оскільки обробник onClick завжди встановлює state
однакове значення:
this.setState({'test':'me'});
Я б очікував, що рендеринг відбуватиметься лише у випадку зміни state
даних.
Ось код прикладу, як JS Fiddle та вбудований фрагмент:
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()
навіть з фіктивними даними призводить до того, що елемент відображатиметься інакше, тому я б сказав "так". Абсолютно слід спробувати відновити об’єкт, коли щось могло змінитися, бо в іншому випадку ваша демонстрація - якщо припустити, що це призначена поведінка - не буде працювати!
shouldComponentUpdate
метод, який, як я вважав, проста версія його вже повинна бути включена в саму React. Здається, що версія за замовчуванням, що міститься в react, просто повертається true
- що змушує компонент повторно відтворювати кожен раз.