📌  相关文章
📜  VirtualizedLists 永远不应该嵌套在具有相同方向的普通 ScrollViews 中 - 改用另一个 VirtualizedList 支持的容器. - 打字稿(1)

📅  最后修改于: 2023-12-03 15:35:36.279000             🧑  作者: Mango

VirtualizedLists in ScrollView - A Cautionary Note

If you are a developer working with React Native or any other mobile app development framework, you may be familiar with VirtualizedLists and their use in ScrollViews. However, there is a common mistake that developers make when using these two components together, leading to performance issues and even crashes.

The Issue

VirtualizedLists are designed to optimize rendering performance by only rendering visible items on the screen. However, if a VirtualizedList is nested within a ScrollView that has the same direction as the VirtualizedList (horizontal or vertical), the performance benefits are lost. This is because the ScrollView will render all items in the VirtualizedList, defeating the purpose of virtualization.

The Solution

To avoid this issue, developers should use a different container that is supported by VirtualizedList, such as FlatList or SectionList. These components provide the same benefits of virtualization while allowing nested scrollable content.

Code Example

Here's an example of how to use a FlatList instead of a ScrollView with a VirtualizedList:

import React from 'react';
import { FlatList } from 'react-native';

const data = [...]; // an array of data to render

const renderItem = ({ item }) => {
  return <Text>{item.title}</Text>;
};

const MyComponent = () => {
  return (
    <FlatList
      data={data}
      renderItem={renderItem}
    />
  );
};

export default MyComponent;

In this example, we are using a FlatList to render a list of items. The data and renderItem props are the same as those used in a VirtualizedList. However, because FlatList is a container that supports virtualization, we can safely nest it within other scrollable components without sacrificing performance.

Conclusion

As a developer, it's important to understand how components work together and how they can impact performance. When using VirtualizedLists and ScrollViews together, be sure to use a container that supports virtualization to avoid unnecessary rendering and improve performance.