【问题标题】:FlatList hangs UI if uses initialNumToRender for larger value如果使用 initialNumToRender 获取更大的值,FlatList 会挂起 UI
【发布时间】:2020-10-27 10:56:44
【问题描述】:

我创建了联系人屏幕,右侧有一个字母字典字符,如果用户选择任何我需要将平面列表移动到该联系人的字符。

但之前我发现它不起作用,因为 flatlist 没有在开始时加载所有数据,如果我试图移动到 flatlist 没有加载的数据,什么都不会发生。

所以暂时我找到了使用 initialNumToRender 内部方法的解决方案,在该方法中我发送了总计数,它可以工作,但是由于我的记录大约是 200,它被挂起并且在切换之间需要时间

有没有更好的方法来达到同样的效果?

我是这样使用 flatList 的

<FlatList
        ref={ref => (this._mainList = ref)}
        initialNumToRender={this.props.data.length}
        scrollEventThrottle={16}
        onViewableItemsChanged={this.onViewableItemsChanged}
        extraData={this.props.data}
        getItemLayout={this.getItemLayout}
        keyExtractor={item => item}
        getItemLayout={this.props.getItemLayout}
        showsHorizontalScrollIndicator={false}
        showsVerticalScrollIndicator={false}
        {...this.props}
      />

【问题讨论】:

    标签: android ios react-native react-native-flatlist


    【解决方案1】:

    这里已经写过:FlatList

    initialNumToRender :这应该足以填满屏幕,但不会更多。

    【讨论】:

    • 但它挂起,因为我的记录是 200,我在这个参数中发送了 200,渲染平面列表需要时间
    • 200 是大数据我的朋友,简单的方法是实现加载更多功能,首先渲染 10 到 20 个项目,然后在滚动上显示另一个数据
    • 嗯是的,但根据我的功能,我需要根据用户选择的字母表显示数据,有什么可能的方法吗?当我们在右栏中选择字母时,您知道国家/地区列表库如何管理这个吗?
    • 尝试移除 initialNumToRender , getItemLayout 并使用 keyExtractor 作为 keyExtractor={(item,index) => index.toString()}
    【解决方案2】:

    你实现了getItemLayout吗?它帮助 FlatList 计算应该在哪里呈现超过 initialNumToRender 的项目。 This answer 解释的很好。

    【讨论】:

    • 我使用了getItemLayout函数,200对于initialNumToRender来说是一个很大的值,加载组件需要时间有没有其他可能的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多