React Native Flatlist 渲染大数据非常慢

时间:2021-07-03 11:08:40

标签: react-native react-native-flatlist flatlist

我正在使用 flatlist 在 react native 中呈现我的数据,但是 flatlist 呈现大量数据的速度非常慢,并且在快速滚动后它会重新呈现数据。因此,我的应用程序需要花费大量时间来显示完整数据。我也收到了这样的消息

VirtualizedList: You have a large list that is slow to update - make sure your renderItem function renders components that follow React performance best practices like PureComponent, shouldComponentUpdate

我尝试了所有 flatlist 优化技术,但 flatlist 渲染速度仍然很慢。任何建议,如何解决这个问题?

我的 flatlist 组件看起来像

<FlatList
     data={questionArray}
     showsVerticalScrollIndicator={false}
     renderItem={renderItem}
     keyExtractor={keyExtractor}
/>

const renderItem = useCallback(
        ({ item, index }) => {
                              ....
                             },
        []
    );

const keyExtractor = useCallback((item, index) => index.toString(), []);

2 个答案:

答案 0 :(得分:0)

您可以尝试一些步骤,因为这完全取决于数据集以及您在项目中实施/使用的方式。

  1. 尝试将基于类的组件变成React.PureComponent

  2. 您也可以尝试将 removeClippedSubviews 设置为 true

     <FlatList removeClippedSubviews ..someOtherProps/>
    
  3. 像这样在您的 keyExtractor 中添加 FlatList

     <FlatList keyExtractor={keyExtractor} ... />
    
  4. 添加 onEndReached 函数。

const [loader, setLoader] = useState(false);

const onEndReached = (page) => {
  if (next && !loader) {
    setPage(page + 1)
  }
}

const loadData = async () => {
  setLoader(true);
  const resp = await getData();
  setLoader(false);
}



<FlatList ...someprops onEndReached={onEndReached} />
  1. 设置initialNumToRender={integer-value}

  2. 发现这个:Flatlist Performance

答案 1 :(得分:-1)

也许可以通过“useMemo()”来实现

   const memoizedValue = useMemo(() => renderItem, [array]);

        <FlatList
            keyExtractor={keyExtractor}
            data={array}
            renderItem={memoizedValue}
        />
      const renderItem = ({ item }) => (
         <ListItem/>
      )