Если вы не хотите, чтобы отображалась вторая полоса прокрутки, вам нужно стилизовать заголовок и родной элемент div так, чтобы они вписывались в доступное окно просмотра.
В коде ручки у вас есть height: '100%'
для вашегопрокруткаЭто стилирует div так, что ему не нужно прокручивать, поэтому бесконечная прокрутка не работает.
Если вы стилизуете этот div так, чтобы он занимал меньше высоты доступного видового экрана и отображал достаточноэлементы, чтобы заполнить его, бесконечная прокрутка будет работать нормально.
Если вы затем стилизуете комбинацию div заголовка так, чтобы они точно вписывались в доступное пространство области просмотра, вы не получите вторую полосу прокрутки.
Ниже представлен вариант, который вы должны сделать.Что я сделал, так это установил высоту элемента прокрутки равным высоте окна просмотра (100vh
) минус 100px
.Это не совсем точно рассчитано, но вы хотите вычесть пространство, необходимое для заголовка, из размера области просмотра.
Эта реализация хорошо работает и для меня, и для вас тоже.
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: "calc(100vh - 100px)", 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'));
<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>
<div id="example"></div>