React có kết xuất lại tất cả các thành phần và thành phần phụ mỗi lần setState
được gọi không?
Nếu vậy, tại sao? Tôi nghĩ ý tưởng là React chỉ hiển thị ít nhất khi cần - khi trạng thái thay đổi.
Trong ví dụ đơn giản sau, cả hai lớp sẽ hiển thị lại khi văn bản được nhấp, mặc dù thực tế là trạng thái không thay đổi ở các lần nhấp tiếp theo, vì trình xử lý onClick luôn đặt state
cùng một giá trị:
this.setState({'test':'me'});
Tôi đã dự đoán rằng kết xuất sẽ chỉ xảy ra nếu state
dữ liệu đã thay đổi.
Đây là mã của ví dụ, dưới dạng một Fiddle JS và đoạn trích được nhúng:
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()
ngay cả với dữ liệu giả cũng khiến phần tử hiển thị khác đi nên tôi sẽ nói có. Tuyệt đối nên thử kết xuất lại đối tượng của bạn khi có điều gì đó có thể thay đổi vì nếu không thì bản demo của bạn - giả sử đó là hành vi dự định - sẽ không hoạt động!
shouldComponentUpdate
phương thức của riêng bạn , mà tôi giả sử một phiên bản đơn giản của nó phải được đưa vào chính React. Âm thanh giống như phiên bản mặc định có trong phản ứng đơn giản trả về true
- điều này buộc thành phần phải kết xuất lại mỗi lần.