首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ListView

DEPRECATED - 使用新的列表组件之一,例如FlatListSectionList有限的内存使用,更少的错误,更好的性能,更易于使用的API和更多功能。看看这篇博客文章了解更多详情。

ListView - 设计用于高效显示垂直滚动的变化数据列表的核心组件。最小的API是创建一个ListView.DataSource数据blob的简单数组,并ListView使用该数据源实例化一个组件,并renderRow从数据数组中获取blob并返回可渲染组件。

最小例子:

代码语言:javascript
复制
class MyComponent extends Component {
  constructor() {
    super();
    const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
    this.state = {
      dataSource: ds.cloneWithRows(['row 1', 'row 2']),
    };
  }

  render() {
    return (
      <ListView
        dataSource={this.state.dataSource}
        renderRow={(rowData) => <Text>{rowData}</Text>}
      />
    );
  }
}

ListView还支持更多高级功能,包括具有粘滞节标题,页眉和页脚支持的段,到达可用数据末尾的回调(onEndReached)以及设备视口中可见的行集(更改(onChangeVisibleRows))以及几个性能优化。

有几个性能操作旨在使ListView在动态加载可能非常大(或概念上无限)的数据集时平滑滚动:

  • 只重新渲染已更改的行 - 提供给数据源的rowHasChanged函数告诉ListView是否需要重新渲染行,因为源数据已更改 - 有关更多详细信息,请参阅ListViewDataSource。
  • 限速行渲染 - 默认情况下,每个事件循环仅渲染一行(可使用pageSize道具自定义)。这将工作分解为更小的块,以减少渲染行时丢帧的机会。

道具

ScrollView道具...

数据源: ListViewDataSource

要使用的ListView.DataSource的实例

enableEmptySections?: bool

指示是否应该呈现空节标题的标志。在将来的版本中,空白部分标题将默认呈现,并且该标记将被弃用。如果不需要渲染空白部分,则应将其索引从sectionID对象中排除。

initialListSize: number

在初始组件安装时渲染多少行。使用它可以使数据的第一个屏幕显示在同一时间,而不是在多个帧的过程中。

onChangeVisibleRows?: function

(visibleRows, changedRows) => void

当一组可见行更改时调用。visibleRows所有可见行的maps {sectionID:{rowID:true}}和changedRowsmaps {sectionID:{rowID:true | 假}}为已更改其可见性的行,其中true指示可见,false指示视图已移出视图。

onEndReached?: function

当所有行都被渲染并且列表已经滚动到底部的onEndReachedThreshold内时调用。提供本地滚动事件。

onEndReachedThreshold: number

用于调用onEndReached的像素阈值(虚拟,而非物理)。

pageSize: number

每个事件循环呈现的行数。注意:如果你的'rows'实际上是单元格的,即它们没有跨越你的视图的全部宽度(就像在ListViewGridLayoutExample中一样),你应该将pageSize设置为每行单元数的倍数,否则,在加载新页面时,可能会在ListView的边缘看到间隙。

removeClippedSubviews?: bool

用于提高大型列表的滚动性能的性能优化,与溢出结合使用:在行容器上“隐藏”。这是默认启用的。

renderFooter?: function

() => renderable

在每个渲染过程中,页眉和页脚总是呈现(如果提供了这些道具)。如果它们重新渲染的代价很高,则将它们包装在StaticContainer或其他合适的机制中。页脚始终位于列表的底部,并在每个渲染过程中位于顶部。在水平ListView中,标题显示在左侧,而页脚位于右侧。

renderHeader?: function

renderRow: function

(rowData, sectionID, rowID, highlightRow) => renderable

从数据源及其ID中获取数据输入,并返回可呈现组件以呈现为行。默认情况下,数据正是放入数据源的数据,但也可以提供自定义提取器。ListView可以在通过调用突出显示行时得到通知highlightRow(sectionID, rowID)。这会在renderSeparator中设置一个布尔值adjacentRowHighlighted,允许您控制高亮行上下的分隔符。可以通过调用highlightRow(null)来重置行的突出显示状态。

renderScrollComponent: function

(props) => renderable

返回呈现列表行的可滚动组件的函数。默认使用给定的道具返回一个ScrollView。

renderSectionHeader?: function

(sectionData, sectionID) => renderable

如果提供,则为此部分渲染标题。

renderSeparator?: function

(sectionID, rowID, adjacentRowHighlighted) => renderable

如果提供了可呈现组件,则在每行下面将呈现为分隔符,但如果下面有节标题,则不会显示最后一行。取上面一行的sectionID和rowID,以及它的相邻行是否突出显示。

scrollRenderAheadDistance: number

在屏幕上显示行之前开始渲染多少行(以像素为单位)。

stickyHeaderIndices: [number]

一组儿童指标,用于确定在滚动时哪些儿童停靠在屏幕的顶部。例如,传递stickyHeaderIndices={[0]}将导致第一个孩子被固定到滚动视图的顶部。该属性不支持与horizontal={true}

stickySectionHeadersEnabled?: bool

使节标题变得粘稠。粘性的行为意味着它将随着该部分顶部的内容一起滚动,直到它到达屏幕的顶部,此时它将坚持顶部直到它被下一部分头部推出屏幕。该属性不支持与horizontal={true}。由于典型的平台标准,只在iOS上启用。

Methods

getMetrics()

导出一些数据,例如用于性能调查或分析。

scrollTo(...args: Array)

滚动到给定的x,y偏移量,立即或平滑动画。

ScrollView#scrollTo

scrollToEnd(options?: object)

如果这是一个垂直的ListView滚动到底部。如果这是一个水平的ListView向右滚动。

使用scrollToEnd({animated: true})平滑滚动动画,scrollToEnd({animated: false})即时滚动。如果没有选项通过,则animated默认为true。

ScrollView#scrollToEnd

flashScrollIndicators()

瞬间显示滚动指示器。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com