Como faço para o React renderizar novamente a exibição quando a janela do navegador é redimensionada?
fundo
Eu tenho alguns blocos que quero fazer o layout individualmente na página, mas também quero que eles sejam atualizados quando a janela do navegador mudar. O resultado final será algo como o layout do Pinterest de Ben Holland , mas escrito usando o React e não apenas o jQuery. Ainda estou longe.
Código
Aqui está o meu aplicativo:
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')
)
Então eu tenho o Blockcomponente (equivalente a um Pinno exemplo acima do Pinterest):
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>
);
}
});
e a lista / coleção de 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>
);
}
});
Questão
Devo adicionar o redimensionamento da janela do jQuery? Se sim, onde?
$( window ).resize(function() {
// re-render the component
});
Existe uma maneira mais "reagir" de fazer isso?
this.updateDimensionspassado paraaddEventListeneré apenas uma referência de função simples que não terá valor parathisquando chamado. Uma função anônima ou uma chamada .bind () deve ser usada para adicionarthisou entendi mal?