【发布时间】:2018-10-30 05:18:42
【问题描述】:
我正在尝试为 React.js 实现无限滚动。一切正常,除了我希望能够使用窗口滚动条来激活无限滚动。目前的代码,有 2 个滚动条(我只想要一个)。
代码来自stackoverflow 在这里回答,我阅读了他的完整答案,我尝试将高度设置为100%,但它使无限滚动不起作用。 :Stackoverflow- answered by Aniket Jha, ( the longest answer with 4 upvotes)
-
当我以这种方式渲染时会发生双滚动:
<div> <First /> <div ref="iScroll" style={{ height: "100vh", overflow: "auto"}}> <ul> {this.displayItems()} </ul> {this.state.loadingState ? <p className="loading"> loading More Items..</p> : ""} </div> </div>
I have a Link to Codepen if this helps
class Layout extends React.Component {
constructor(props) {
super(props);
this.state = {
items: 30,
loadingState: false
};
}
componentDidMount() {
this.refs.iScroll.addEventListener("scroll", () => {
if (this.refs.iScroll.scrollTop + this.refs.iScroll.clientHeight >= this.refs.iScroll.scrollHeight - 20){
this.loadMoreItems();
}
});
}
displayItems() {
var items = [];
for (var i = 0; i < this.state.items; i++) {
items.push(<li key={i}>Item {i}</li>);
}
return items;
}
loadMoreItems() {
if(this.state.loadingState){
return;
}
this.setState({ loadingState: true });
setTimeout(() => {
this.setState({ items: this.state.items + 10, loadingState: false });
}, 1000);
}
render() {
return (<div>
<First />
<div ref="iScroll" style={{ height: "100vh", overflow: "auto"}}>
<ul>
{this.displayItems()}
</ul>
{this.state.loadingState ? <p className="loading"> loading More Items..</p> : ""}
</div>
</div>
);
}
}
class First extends React.Component {
constructor(props) {
super(props);
this.state = {
};
}
render() {
return (
<h1>Testing</h1>
)
}
}
ReactDOM.render(<Layout />, document.getElementById('example'));
【问题讨论】:
-
我不确定你所说的“双滚动条”是什么意思,但我可以看到 div 只有 200px 高。当然,如果您将其设置为 100%,则无限滚动将不起作用,因为它的尺寸太大。我建议尝试
height: 100vh。如果我在你的 codepen 上破解它,那效果很好。但是你也应该增加最初的项目数量——至少应该多出 1 个,超过屏幕可以容纳的数量。 25 人为我工作。 -
我更新了codepen。基本上当我渲染整个项目时,第二个组件是这个列表,它会给我双滚动
标签: javascript reactjs infinite-scroll