【React Native】文件翻譯閱讀紀錄 - Components(組件) - ListView

by - 上午9:00

Facebook Open Source React Native


ListView

DEPRECATED - 使用其中一個新的列表組件,例如FlatList或SectionList,用於有限內存使用,更少的錯誤,更好的性能,更易於使用的API以及更多功能。查看此博客文章了解更多詳情。

ListView - 一個核心組件,旨在高效顯示垂直滾動的更改數據列表。最小的API是創建ListView.DataSource,使用簡單的數據blob數組填充它,並使用該數據源和renderRow回調實例化ListView組件,該回調從數據數組中獲取blob並返回可渲染組件。


最小的例子:
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 prop自定義)。這會將工作分解為更小的塊,以減少渲染行時丟幀的可能性。

Props

Methods


參考

Props

dataSource

要使用的 ListView.DataSource 的實例
TYPEREQUIRED
ListViewDataSourceYes

initialListSize

初始組件裝載時要渲染的行數。使用此選項可以使第一個屏幕的數據一次出現,而不是在多個幀的過程中出現。
TYPEREQUIRED
numberYes

onEndReachedThreshold

用於調用onEndReached的像素閾值(虛擬,非物理)。
TYPEREQUIRED
numberYes

pageSize

每個事件循環呈現的行數。注意:如果您的'行'實際上是單元格,即它們沒有跨越視圖的整個寬度(如在ListViewGridLayoutExample中),則應將pageSize設置為每行單元格數的倍數,否則您'在加載新頁面時,可能會在ListView的邊緣看到間隙。
TYPEREQUIRED
numberYes

renderRow

(rowData, sectionID, rowID, highlightRow) => renderable
從數據源及其ID中獲取數據條目,並應返回可呈現為行的可呈現組件。默認情況下,數據正是放入數據源的數據,但也可以提供自定義提取器。通過調用highlightRow(sectionID,rowID)突出顯示行時,可以通知ListView。這將在renderSeparator中設置adjacentRowHighlighted的布爾值,允許您控制突出顯示的行上方和下方的分隔符。可以通過調用highlightRow(null)重置行的突出顯示狀態。
TYPEREQUIRED
functionYes

renderScrollComponent

(props) => renderable
一個函數,它返回呈現列表行的可滾動組件。默認使用給定的props返回ScrollView。
TYPEREQUIRED
functionYes

scrollRenderAheadDistance

在行進入屏幕之前開始渲染行的時間,以像素為單位。
TYPEREQUIRED
numberYes

stickyHeaderIndices

一組子索引,用於確定滾動時哪些子項停靠在屏幕頂部。例如,傳遞stickyHeaderIndices = {[0]}將導致第一個子項固定到滾動視圖的頂部。與horizo​​ntal = {true}不支持此屬性。
TYPEREQUIRED
array of numberYes

enableEmptySections

指示是否應呈現空節標題的標誌。在將來版本中,默認情況下將呈現空節標題,並且不推薦使用該標誌。如果不希望渲染空部分,則應從sectionID對像中排除其索引。
TYPEREQUIRED
boolNo

renderHeader

TYPEREQUIRED
functionNo

onEndReached

在所有行都已渲染並且列表已滾動到底部的onEndReachedThreshold內時調用。提供了本機滾動事件。
TYPEREQUIRED
functionNo

stickySectionHeadersEnabled

使節標頭變粘。粘性行為意味著它將與該部分頂部的內容一起滾動,直到它到達屏幕頂部,此時它將粘到頂部,直到它被下一部分標題推離屏幕。與horizo​​ntal = {true}不支持此屬性。僅在iOS上默認啟用,因為典型的平台標準。
TYPEREQUIRED
boolNo

renderSectionHeader

(sectionData, sectionID) => renderable
如果提供,則為此部分呈現標題。
TYPEREQUIRED
functionNo

renderSeparator

(sectionID, rowID, adjacentRowHighlighted) => renderable
如果提供,則可渲染組件將在每行下方呈現為分隔符,但如果下面有節標題則不會呈現最後一行。獲取上面一行的sectionID和rowID以及它的相鄰行是否突出顯示。
TYPEREQUIRED
functionNo

onChangeVisibleRows

(visibleRows, changedRows) => void
當可見行集更改時調用。 visibleRows為所有可見行映射{sectionID:{rowID:true}},並且changedRows映射{sectionID:{rowID:true | false}用於已更改其可見性的行,其中true表示可見,false表示視圖已移出視圖。
TYPEREQUIRED
functionNo

removeClippedSubviews

用於改進大型列表的滾動性能的性能優化,與溢出一起使用:行容器上的“隱藏”。默認情況下啟用此功能。
TYPEREQUIRED
boolNo

renderFooter

() => renderable
在每個渲染過程中始終呈現頁眉和頁腳(如果提供了這些道具)。如果重新渲染它們很昂貴,請將它們包裝在StaticContainer或其他適當的機制中。在每個渲染過程中,頁腳始終位於列表的底部,標題位於頂部。在水平ListView中,標題在左側呈現,頁腳在右側呈現。
TYPEREQUIRED
functionNo

Methods

getMetrics()

getMetrics();
導出一些數據,例如用於性能調查或分析。

scrollTo()

scrollTo(...args: Array)
立即或使用平滑動畫滾動到給定的x,y偏移。
See ScrollView#scrollTo.

scrollToEnd()

scrollToEnd(([options]: object));
如果這是一個垂直ListView滾動到底部。如果這是一個水平ListView滾動到右邊。

使用scrollToEnd({animated:true})進行平滑的動畫滾動,使用scrollToEnd({animated:false})進行即時滾動。如果未傳遞任何選項,則動畫默認為true。
See ScrollView#scrollToEnd.

flashScrollIndicators()

flashScrollIndicators();
暫時顯示滾動指示器。




You May Also Like

0 意見