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 Block
bileşen var ( Pin
yukarı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
İletilenaddEventListener
için bir değere sahip olacaktır sadece çıplak fonksiyon referansthis
geçerli olacaktır. Anonim bir işlev veya bir .bind () çağrısı eklemek için kullanılmalı mıthis
yoksa yanlış mı anlaşıldım?