Làm cách nào tôi có thể khiến React hiển thị lại chế độ xem khi cửa sổ trình duyệt được thay đổi kích thước?
Lý lịch
Tôi có một số khối mà tôi muốn bố trí riêng trên trang, tuy nhiên tôi cũng muốn chúng cập nhật khi cửa sổ trình duyệt thay đổi. Kết quả cuối cùng sẽ giống như bố cục Pinterest của Ben Holland , nhưng được viết bằng React không chỉ jQuery. Tôi vẫn còn một lối thoát.
Mã
Đây là ứng dụng của tôi:
var MyApp = React.createClass({
//does the http get from the server
loadBlocksFromServer: function() {
$.ajax({
url: this.props.url,
dataType: 'json',
mimeType: 'textPlain',
success: function(data) {
this.setState({data: data.events});
}.bind(this)
});
},
getInitialState: function() {
return {data: []};
},
componentWillMount: function() {
this.loadBlocksFromServer();
},
render: function() {
return (
<div>
<Blocks data={this.state.data}/>
</div>
);
}
});
React.renderComponent(
<MyApp url="url_here"/>,
document.getElementById('view')
)
Sau đó, tôi có Block
thành phần (tương đương với một Pin
trong ví dụ Pinterest ở trên):
var Block = React.createClass({
render: function() {
return (
<div class="dp-block" style={{left: this.props.top, top: this.props.left}}>
<h2>{this.props.title}</h2>
<p>{this.props.children}</p>
</div>
);
}
});
và danh sách / bộ sưu tập của Blocks
:
var Blocks = React.createClass({
render: function() {
//I've temporarily got code that assigns a random position
//See inside the function below...
var blockNodes = this.props.data.map(function (block) {
//temporary random position
var topOffset = Math.random() * $(window).width() + 'px';
var leftOffset = Math.random() * $(window).height() + 'px';
return <Block order={block.id} title={block.summary} left={leftOffset} top={topOffset}>{block.description}</Block>;
});
return (
<div>{blockNodes}</div>
);
}
});
Câu hỏi
Tôi có nên thêm kích thước cửa sổ của jQuery không? Nếu vậy thì ở đâu?
$( window ).resize(function() {
// re-render the component
});
Có cách nào khác Reac React làm điều này không?
this.updateDimensions
đếnaddEventListener
chỉ là một tham chiếu hàm trần sẽ không có giá trịthis
khi được gọi. Nên sử dụng một hàm ẩn danh hoặc một lệnh gọi .bind () để thêmthis
hoặc tôi đã hiểu nhầm?