我遇到了使用ListView组件进行无限滚动的问题。这是我的列表元素:
const dataSource = this.state.dataSource.cloneWithRows(this.getDataSource())
<ListView
onEndReached={this.onEndReached.bind(this)}
onEndReachedThreshold={5}
onScroll={this.onScroll.bind(this)}
dataSource={dataSource}
renderRow={this.renderRow.bind(this)}
automaticallyAdjustContentInsets={false} />
我的onEndReached()代码:
onEndReached() {
if (this.state.hasScrolled) {
const dataSource = this.state.dataSource.cloneWithRows(this.getDataSource())
this.setState({
offset: this.state.offset + this.state.limit,
dataSource
})
}
}
getDataSource():
getDataSource() {
let dataSource = []
if (this.state.messages && this.state.messages.length) {
this.state.messages.map((message) => {
dataSource.push(message)
})
}
return dataSource
}
但是当我测试这段代码并到达底部时。在我第三次触发onEndReached()之前它没有做任何事情,然后在那时它将偏移设置为高于预期的数字。我尝试使用诸如isLoaded之类的标志来防止onEndReached()多次被触发,但如果我这样做,则列表不会刷新新内容。
提前致谢!