브라우저 창의 크기를 조정할 때 React에서 뷰를 다시 렌더링하려면 어떻게해야합니까?
배경
페이지에서 개별적으로 레이아웃하려는 블록이 있지만 브라우저 창이 변경되면 업데이트하기를 원합니다. 최종 결과는 Ben Holland의 Pinterest 레이아웃과 비슷하지만 jQuery뿐만 아니라 React를 사용하여 작성됩니다. 나는 아직도 방법입니다.
암호
내 응용 프로그램은 다음과 같습니다.
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')
)
그런 다음 Block
구성 요소가 있습니다 ( Pin
위 Pinterest 예의 a와 동일 ).
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>
);
}
});
및 목록 / 컬렉션 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>
);
}
});
질문
jQuery의 창 크기를 추가해야합니까? 그렇다면 어디서?
$( window ).resize(function() {
// re-render the component
});
이 작업을 수행하는 더 "반응적인"방법이 있습니까?
this.updateDimensions
에 통과addEventListener
에 대한 값이 없습니다 단지 베어 함수 참조가this
전화했을 때를. 익명 함수 또는 .bind () 호출을 사용하여 추가this
해야합니까, 아니면 오해해야합니까?