【问题标题】:React Native ListView onEndReached keeps firingReact Native ListView onEndReached 不断触发
【发布时间】:2016-07-22 16:30:49
【问题描述】:

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

这是 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 顶部的所有内容,它有许多组件和视图以及子视图,而不是列表视图的标题。

【问题讨论】:

    标签: listview react-native ecmascript-6


    【解决方案1】:

    看看这是否有效:

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

    【讨论】:

    • 我想onEndReached 一直触发的原因是嵌套 ListView 和 ScrollView 造成的一些问题。您是否注意到这是否停止了,即使它破坏了视图?
    • 我明白了,我只是想问当你“取消嵌套”两个组件时,保持射击的问题是否停止了。我了解您有两个问题:触发和布局。
    • 问题是 Toolbar 在一个 Activity 容器内,里面有 Toolbar 和其他组件,并且包装了所有组件,包括 ListView,我不能让它成为 Header出于这个原因的列表视图
    • 如果您使用stackoverflow.com/questions/36747541/… 和您的链接稍微完善您的答案,我会将您的答案标记为正确。
    【解决方案2】:

    当 > 1 列时在 ListView 中使用散列进行分页

    目前,我使用的是 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 属性也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      相关资源
      最近更新 更多