0
ゼロから無限のスクロールを実装してReactを学習しようとしています。ゼロから構築されたReactJSの無限のスクロールは、少し後に動作を停止します。
アルゴリズム:
arr
1000件のdivarr2
の配列では、arr
から21のdiv要素の配列スライスです。arr2
はスクロールによって更新されます。- コンソールは
arr
の電流範囲が
のjQueryが含まれるをレンダリングされる示すarr2
で
これは少しでも機能します。しかし、約34要素後に停止します。どうして?
(スニペットが含ままた、ここではJSBinです:http://jsbin.com/yonabiv/edit?html,js,console,output)
var arr = [];
for (var i = 0; i<1000; i++) {
arr.push(i);
}
class Element extends React.Component{
render() {
const styleObj = {height: 100, backgroundColor:"hotpink"};
return (<div style={styleObj}> {this.props.data} </div>);
}
}
class List extends React.Component{
constructor(props) {
super(props);
this.state = {
visibleStart: 0,
visibleEnd: 20
};
}
render() {
var arr2 = arr.slice(this.state.visibleStart, this.state.visibleEnd);
var renderedOutput = arr2.map((item,index) => <Element data={item} key={index} />)
return (
<div>
{renderedOutput}
</div>
);
}
componentDidMount() {
window.addEventListener('scroll', this.handleScroll.bind(this))
}
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll.bind(this))
}
handleScroll(event) {
var visibleStart = Math.floor($(window).scrollTop()/100);
var visibleEnd = visibleStart + 20;
console.log(visibleStart + " " + visibleEnd);
this.setState({
visibleStart: visibleStart,
visibleEnd: visibleEnd
});
}
}
ReactDOM.render(<List />, document.getElementById("app"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>React Infinite Scroll</title>
</head>
<body>
<div id="app"></div>
</body>
</html>