每次setState
调用时,React都会重新渲染所有组件和子组件吗?
如果是这样,为什么?我以为这个想法是,当状态改变时,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
-这迫使组件每次都重新渲染。