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
、コンポーネントを毎回強制的に再レンダリングします。