¿Cómo puedo hacer que React vuelva a representar la vista cuando se cambia el tamaño de la ventana del navegador?
Antecedentes
Tengo algunos bloques que quiero diseñar individualmente en la página, sin embargo, también quiero que se actualicen cuando cambie la ventana del navegador. El resultado final será algo así como el diseño de Pinterest de Ben Holland , pero escrito usando React no solo jQuery. Todavía estoy muy lejos.
Código
Aquí está mi aplicación:
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')
)
Luego tengo el Block
componente (equivalente a a Pin
en el ejemplo de Pinterest anterior):
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>
);
}
});
y la lista / colección 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>
);
}
});
Pregunta
¿Debo agregar el cambio de tamaño de la ventana de jQuery? ¿Si es así, donde?
$( window ).resize(function() {
// re-render the component
});
¿Hay una manera más "Reaccionar" de hacer esto?
this.updateDimensions
pasado aaddEventListener
es solo una referencia de función desnuda que no tendrá valor parathis
cuando se llama. ¿Debería usarse una función anónima, o una llamada .bind () para agregarthis
, o he entendido mal?