React Native ListView onEndReached一直在触发

时间:2016-07-22 16:30:49

标签: listview react-native ecmascript-6

由于某种原因,我不明白,我的ListView一直在触发,即使它位于滚动的顶部,我需要将其包装在ScrollView中,因为当用户在ListView中向下滚动时我希望我的ToolBar隐藏同样。

这是render()方法的内容:

<ScrollView>
    <ActivityContainer>
      <ListView
        onEndReachedThreshold={100}
        pageSize={10}
        initialListSize={20}
        onEndReached={() => {
                        console.log("fired"); // keeps firing
                      }}
        enableEmptySections={true}/>
    </ActivityContainer>
</ScrollView>

还尝试在这样的视图中包装整个事物:

<ScrollView>
   <View>
    <ActivityContainer>
      <ListView
        onEndReachedThreshold={100}
        pageSize={10}
        initialListSize={20}
        onEndReached={() => {
                        console.log("fired"); // keeps firing
                      }}
        enableEmptySections={true}/>
    </ActivityContainer>
   </View>
</ScrollView>

编辑:我不需要renderHeader,因为我正在尝试滚动ListView顶部的所有内容,它有许多组件和视图以及子视图,而不是列表视图的标题。

2 个答案:

答案 0 :(得分:3)

看看是否有效:

<ListView
  onEndReachedThreshold={100}
  pageSize={10}
  renderHeader={() => <ToolbarAndroid />}
  initialListSize={20}
  onEndReached={() => {
    console.log("fired"); // keeps firing
  }}
  enableEmptySections={true}/>

答案 1 :(得分:0)

当&gt;时,在ListView中使用散列进行分页。 1列

目前,我使用的是React Native v44,但尚未尝试使用最新版本。

在你的构造函数中试试这个...

constructor(props) {
  this.pagesLoaded = {}
  this.currentPage = 1
  // etc
}

然后在你的数据提取方法中尝试这个......

getData() {
  if (this.pagesLoaded[this.state.currentPage]) return
  this.pagesLoaded[this.state.currentPage] = true
  // fetch data
}

这种方式当onEndReached被过度解雇时,无关紧要。这似乎是ListView中的一个错误,因为我已经设置了它周围的维度并且没有在ScrollView内,所以即使设置getItemLayout道具,它也只是在组件内发生。