Wie kann ich React dazu bringen, die Ansicht neu zu rendern, wenn die Größe des Browserfensters geändert wird?
Hintergrund
Ich habe einige Blöcke, die ich einzeln auf der Seite gestalten möchte, aber ich möchte auch, dass sie aktualisiert werden, wenn sich das Browserfenster ändert. Das Endergebnis wird so etwas wie das Pinterest-Layout von Ben Holland sein , das jedoch nicht nur mit jQuery, sondern auch mit React geschrieben wurde. Ich bin noch weit weg.
Code
Hier ist meine 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')
)
Dann habe ich die Block
Komponente (entspricht a Pin
im obigen Pinterest-Beispiel):
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>
);
}
});
und die Liste / Sammlung von 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>
);
}
});
Frage
Sollte ich die Fenstergröße von jQuery hinzufügen? Wenn ja, wo?
$( window ).resize(function() {
// re-render the component
});
Gibt es eine "Reaktions" -Methode, um dies zu tun?
this.updateDimensions
übergeben anaddEventListener
ist nur eine bloße Funktionsreferenz, für diethis
beim Aufruf kein Wert angegeben wird . Sollte eine anonyme Funktion oder ein Aufruf von .bind () zum Hinzufügen verwendetthis
werden oder habe ich das falsch verstanden?