首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FlatList在呈现时调用‘`onEndReached`’

FlatList在呈现时调用‘`onEndReached`’
EN

Stack Overflow用户
提问于 2017-12-20 16:06:05
回答 18查看 85.1K关注 0票数 54

下面是我的简单category list page的render()函数。

最近,我为我的FlatList视图添加了分页,所以当用户滚动到底部时,会在某个点(从底部的onEndReachedThreshold值长度)调用onEndReached,它将获取下一个categories并连接类别道具。

但我的问题是,当()被称为时,就调用了FlatList,换句话说,FlatList的onEndReached在到达底部之前就被触发了。

我是不是把onEndReachedThreshold?的值放错了,你觉得有什么问题吗?

代码语言:javascript
运行
复制
return (
  <View style={{ flex:1 }}>
    <FlatList
      data={this.props.categories}
      renderItem={this._renderItem}
      keyExtractor={this._keyExtractor}
      numColumns={2}
      style={{flex: 1, flexDirection: 'row'}}
      contentContainerStyle={{justifyContent: 'center'}}
      refreshControl={
        <RefreshControl
          refreshing = {this.state.refreshing}
          onRefresh = {()=>this._onRefresh()}
        />
      }
      // curent value for debug is 0.5
      onEndReachedThreshold={0.5} // Tried 0, 0.01, 0.1, 0.7, 50, 100, 700

      onEndReached = {({distanceFromEnd})=>{ // problem
        console.log(distanceFromEnd) // 607, 878 
        console.log('reached'); // once, and if I scroll about 14% of the screen, 
                             //it prints reached AGAIN. 
        this._onEndReachedThreshold()
      }}
    />
  </View>
)

更新我在这里获取this.props.categories数据

代码语言:javascript
运行
复制
  componentWillMount() {
    if(this.props.token) {
      this.props.loadCategoryAll(this.props.token);
    }
  }
EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2017-12-22 11:43:17

尝试在onMomentumScrollBegin上实现FlatList

代码语言:javascript
运行
复制
constructor(props) {
    super(props);
    this.onEndReachedCalledDuringMomentum = true;
}

..。

代码语言:javascript
运行
复制
<FlatList
    ...
    onEndReached={this.onEndReached.bind(this)}
    onEndReachedThreshold={0.5}
    onMomentumScrollBegin={() => { this.onEndReachedCalledDuringMomentum = false; }}
/>

并修改您的onEndReached

代码语言:javascript
运行
复制
onEndReached = ({ distanceFromEnd }) => {
    if(!this.onEndReachedCalledDuringMomentum){
        this.fetchData();
        this.onEndReachedCalledDuringMomentum = true;
    }
}
票数 76
EN

Stack Overflow用户

发布于 2020-02-11 12:09:56

我已经安排好了

代码语言:javascript
运行
复制
<Flatlist
    ...
    onEndReached={({ distanceFromEnd }) => {
        if (distanceFromEnd < 0) return;
        ...
    }
    ...
/>
票数 36
EN

Stack Overflow用户

发布于 2019-08-21 20:31:44

首先检查FlatList是否位于本机基的ScrollViewContent中。然后把它去掉--实际上您不需要使用ContentScrollView,因为FlatList有ListFooterComponentListHeaderComponent

虽然不推荐使用Flatlist,但是如果您确实需要在ScrollView中使用Flatlist,那么请看下面的答案:https://stackoverflow.com/a/57603742/6170191

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47910127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档