如何在响应本机的平面列表中应用延迟加载

Posted

技术标签:

【中文标题】如何在响应本机的平面列表中应用延迟加载【英文标题】:How to apply lazy loading in flatlist in react native 【发布时间】:2018-09-13 20:31:37 【问题描述】:

在响应原生的 Flatlist 中应用延迟加载的最佳方法是什么。 目前在平面列表中有无限滚动。 我是 React Native 的新手,所以我不知道。

【问题讨论】:

通常人们会监听onScrollEnd 事件,当它向服务器发送发送请求时,只需更新您的数据即可 你能找到一种延迟加载的方法吗? 【参考方案1】:

你应该使用

<FlatList ....
onEndReached=this.endReached
onEndReachedThreshold=.7
.../>

onEndReached:当滚动位置进入渲染内容的 onEndReachedThreshold 时调用一次。

onEndReachedThreshold:列表的底部边缘必须距内容末尾多远(以列表的可见长度为单位)才能触发onEndReached回调。因此,当内容的结尾在列表可见长度的一半以内时,值 0.5 将触发 onEndReached。

例如:

class YourClass extends Component 
  state =  list: [], offset: 0, limit: 100 ;
  componentDidMount() 
      this.fetchResult();
  
    fetchResult = () => 
        const  offset, limit, list  = this.state;
        fetchModeDateFromAPI(offset, limit).then(res => 
        if (!res.list) return;
        this.setState(
            list: list.concat(res.list),
            offset: offset + 100,
            limit: limit
        );
        );
    ;
    render = () => 
        return (
        <FlatList
            style= flex: 1 
            extraData=this.state
            onEndReached=this.fetchResult
            onEndReachedThreshold=0.7
            data=this.state.list
            renderItem=rowData => 
            keyExtractor=item => item.id.toString()
        />
        );
    ;

【讨论】:

不应该“限制”是一个常数整数,只有偏移量应该改变?如果我没记错的话,您的代码会在每次调用时获取越来越多的列表项,并开始获取以前项目的副本。第一个 100 以偏移量 0 获取,第二次调用将获取额外的 200 个偏移量为 100 的项目,第三次调用获取 300 个偏移量为 200 的项目(但从 200 到 300 的项目已经在第二次调用中获取)等等......? 用于偏移量:this.state.list + 1。这样每次你都可以从服务器获取新数据。

以上是关于如何在响应本机的平面列表中应用延迟加载的主要内容,如果未能解决你的问题,请参考以下文章

如何使用路由器磁通本机进行延迟加载以获得更好的性能?

为啥在本机查询 Hibernate 延迟加载的子实体中?

Chrome 中的本机延迟加载

实现带有数据库、客户端和后端的列表的延迟加载

MyBatis应用开发(18)延迟加载之延迟加载触发方法(lazyLoadTriggerMethods)

在ionic2中使用图像和文本加载延迟列表