📌  相关文章
📜  virtualizedlists 不应该嵌套在具有相同方向的普通滚动视图中 - Javascript (1)

📅  最后修改于: 2023-12-03 14:48:20.086000             🧑  作者: Mango

VirtualizedLists 不应该嵌套在具有相同方向的普通滚动视图中 - Javascript

在开发移动端应用时,列表渲染是非常常见的操作。但是在使用 VirtualizedList 对长列表进行性能优化时,需要注意不能将它嵌套在具有相同方向的普通滚动视图中,否则会导致出现布局问题和渲染性能下降的问题。

问题描述

在使用 VirtualizedList 时,如果将其嵌套在具有相同方向的普通滚动视图中,就会出现列表无法滚动的问题。具体表现为在滚动列表时,整个页面会跟着一起滚动,导致无法独立滚动列表。

解决方案

为了解决这个问题,可以使用以下两种方法:

  1. 使用两个方向不同的滚动视图

VirtualizedList 嵌套在一个方向不同的滚动视图中,这样可以避免嵌套滚动视图的问题,同时也能保持列表的性能优化。比如,在横向滚动的页面中使用垂直方向的 VirtualizedList

<ScrollView horizontal={true}>
  <View>
    <VirtualizedList
      data={data}
      renderItem={({item}) => <Text>{item.title}</Text>}
      keyExtractor={item => item.id}
    />
  </View>
</ScrollView>
  1. 将普通滚动视图替换为单独的组件

将普通滚动视图替换为一个单独的组件,并将需要滚动的内容放在该组件中,这样也可以避免嵌套滚动视图的问题。

class MyScrollView extends React.Component {
  render() {
    const {data} = this.props;
    return (
      <ScrollView style={{flex: 1}}>
        {data.map(item => <Text key={item.id}>{item.title}</Text>)}
      </ScrollView>
    );
  }
}

<MyScrollView data={data} />
总结

在开发移动端应用时,通常需要使用列表渲染来展示数据。在使用 VirtualizedList 对长列表进行性能优化时,需要注意不能将其嵌套在具有相同方向的普通滚动视图中,否则会导致出现布局问题和渲染性能下降的问题。为了解决这个问题,可以使用两个方向不同的滚动视图或将普通滚动视图替换为单独的组件。