Tarayıcı penceresi yeniden boyutlandırıldığında React'ın görünümü yeniden oluşturmasını nasıl sağlayabilirim?
Arka fon
Sayfada ayrı ayrı düzenlemek istediğim bazı bloklarım var, ancak tarayıcı penceresi değiştiğinde bunların güncellenmesini de istiyorum. En son sonuç Ben Holland'ın Pinterest düzeni gibi bir şey olacak , ancak React kullanılarak sadece jQuery kullanılarak yazılmayacak. Hala bir çıkış yolum var.
kod
İşte benim app:
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')
)
Sonra Blockbileşen var ( Pinyukarıdaki Pinterest örneğinde bir eşdeğer ):
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>
);
}
});
ve aşağıdakilerin listesi / koleksiyonu 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>
);
}
});
Soru
JQuery'nin pencere yeniden boyutlandırmasını eklemeli miyim? Öyleyse, nerede?
$( window ).resize(function() {
// re-render the component
});
Bunu yapmanın daha “Tepki” yolu var mı?
this.updateDimensionsİletilenaddEventListeneriçin bir değere sahip olacaktır sadece çıplak fonksiyon referansthisgeçerli olacaktır. Anonim bir işlev veya bir .bind () çağrısı eklemek için kullanılmalı mıthisyoksa yanlış mı anlaşıldım?