【React Native】文件翻譯閱讀紀錄 - Components(組件) - VirtualizedList
![]() |
| Facebook Open Source React Native |
VirtualizedList
更方便的<FlatList>和<SectionList>組件的基本實現,這些組件也有更好的文檔記錄。通常,只有在需要比FlatList提供的更多靈活性時才應該使用它,例如,用於不可變數據而不是普通數組。
虛擬化通過維護活動項的有限渲染窗口並用適當大小的空白空間替換渲染窗口外的所有項,大大提高了大型列表的內存消耗和性能。窗口適應滾動行為,如果遠離可見區域,則以低pri(在任何正在運行的交互之後)逐漸呈現項目,或者使用hi-pri以最小化看到空白空間的可能性。
一些警告:
虛擬化通過維護活動項的有限渲染窗口並用適當大小的空白空間替換渲染窗口外的所有項,大大提高了大型列表的內存消耗和性能。窗口適應滾動行為,如果遠離可見區域,則以低pri(在任何正在運行的交互之後)逐漸呈現項目,或者使用hi-pri以最小化看到空白空間的可能性。
一些警告:
- 當內容滾出渲染窗口時,不會保留內部狀態。確保在項目數據或外部存儲(如Flux,Redux或Relay)中捕獲所有數據。
- 這是一個PureComponent,這意味著如果道具保持淺層相等,它將不會重新渲染。確保renderItem函數所依賴的所有內容在更新後作為prop(例如extraData)傳遞,而不是===,否則您的UI可能無法更新更新。這包括數據prop和父組件狀態。
- 為了限制內存並啟用平滑滾動,內容在屏幕外異步呈現。這意味著可以比填充率更快地滾動並暫時看到空白內容。這是一個可以調整以適應每個應用程序需求的權衡,我們正在努力在幕後進行改進。
- 默認情況下,列表在每個項目上查找關鍵支柱,並將其用於React鍵。或者,您可以提供自定義keyExtractor道具。
Props
ScrollViewprops...renderItemdatagetItemgetItemCountdebugextraDatagetItemLayoutinitialScrollIndexinvertedCellRendererComponentListEmptyComponentListFooterComponentListHeaderComponentonEndReachedonLayoutonRefreshonScrollToIndexFailedonViewableItemsChangedrefreshingremoveClippedSubviewsrenderScrollComponentviewabilityConfigviewabilityConfigCallbackPairshorizontalinitialNumToRenderkeyExtractormaxToRenderPerBatchonEndReachedThresholdupdateCellsBatchingPeriodwindowSizedisableVirtualizationprogressViewOffset
Methods
參考
Props
renderItem
(info: any) => ?React.Element<any>
從數據中獲取項目並將其呈現到列表中
| TYPE | REQUIRED |
|---|---|
| function | Yes |
data
默認的訪問器函數假設這是一個形狀為{key:string}的對像數組,但您可以覆蓋getItem,getItemCount和keyExtractor來處理任何類型的基於索引的數據。
| TYPE | REQUIRED |
|---|---|
| any | Yes |
getItem
(data: any, index: number) => object;
用於從任何類型的數據blob中提取項目的通用訪問器。
| TYPE | REQUIRED |
|---|---|
| function | Yes |
getItemCount
(data: any) => number;
確定數據blob中的項目數。
| TYPE | REQUIRED |
|---|---|
| function | Yes |
debug
debug 將打開額外的日誌記錄和可視覆蓋,以幫助調試使用和實現,但具有顯著的性能。
| TYPE | REQUIRED |
|---|---|
| boolean | No |
extraData
用於告知列表重新呈現的標記屬性(因為它實現了PureComponent)。如果你的任何renderItem,Header,Footer等函數依賴於數據道具之外的任何東西,請將其粘貼在此處並進行不可變處理。
| TYPE | REQUIRED |
|---|---|
| any | No |
getItemLayout
(
data: any,
index: number,
) => {length: number, offset: number, index: number}
| TYPE | REQUIRED |
|---|---|
| function | No |
initialScrollIndex
而不是從第一個項目的頂部開始,從 initialScrollIndex 開始。這將禁用“滾動到頂部”優化,該優化使第一個 initialNumToRender 項始終呈現,並立即呈現從此初始索引開始的項。需要實現 getItemLayout。
| TYPE | REQUIRED |
|---|---|
| number | No |
inverted
反轉滾動方向。使用-1的比例變換。
| TYPE | REQUIRED |
|---|---|
| boolean | No |
CellRendererComponent
使用此元素渲染每個單元格。可以是React Component Class,也可以是render函數。默認使用View。
| TYPE | REQUIRED |
|---|---|
| component, function | No |
ListEmptyComponent
列表為空時呈現。可以是React Component Class,渲染函數或渲染元素。
| TYPE | REQUIRED |
|---|---|
| component, function, element | No |
ListFooterComponent
在所有項目的底部呈現。可以是React Component Class,渲染函數或渲染元素。
| TYPE | REQUIRED |
|---|---|
| component, function, element | No |
ListHeaderComponent
呈現在所有項目的頂部。可以是React Component Class,渲染函數或渲染元素。
| TYPE | REQUIRED |
|---|---|
| component, function, element | No |
onLayout
| TYPE | REQUIRED |
|---|---|
| function | No |
onRefresh
() => void
如果提供,將為“Pull to Refresh”功能添加標準RefreshControl。確保正確設置刷新道具。
| TYPE | REQUIRED |
|---|---|
| function | No |
onScrollToIndexFailed
(info: {
index: number,
highestMeasuredFrameIndex: number,
averageItemLength: number,
}) => void
用於在滾動到尚未測量的索引時處理故障。建議的操作是計算自己的偏移量並滾動它,或者盡可能滾動,然後在渲染更多項目後再試一次。
| TYPE | REQUIRED |
|---|---|
| function | No |
onViewableItemsChanged
(info: {
viewableItems: array,
changed: array,
}) => void
當 viewabilityConfig prop 定義時,行的可見度發生變化時調用。
| TYPE | REQUIRED |
|---|---|
| function | No |
refreshing
在等待刷新的新數據時設置為 true。
| TYPE | REQUIRED |
|---|---|
| boolean | No |
removeClippedSubviews
這可以改善大型列表的滾動性能。
注意:在某些情況下可能存在錯誤(缺少內容) - 使用風險自負。
| TYPE | REQUIRED |
|---|---|
| boolean | No |
renderScrollComponent
(props: object) => element;
渲染自定義滾動組件,例如使用不同風格的 RefreshControl。
| TYPE | REQUIRED |
|---|---|
| function | No |
viewabilityConfig
有關流類型和更多文檔,請參閱 ViewabilityHelper.js。
| TYPE | REQUIRED |
|---|---|
| ViewabilityConfig | No |
viewabilityConfigCallbackPairs
ViewabilityConfig / onViewableItemsChanged 對列表。當滿足相應的 ViewabilityConfig 條件時,將調用特定的 onViewableItemsChanged。有關流類型和更多文檔,請參閱 ViewabilityHelper.js。
| TYPE | REQUIRED |
|---|---|
| array of ViewabilityConfigCallbackPair | No |
horizontal
| TYPE | REQUIRED |
|---|---|
| boolean | No |
initialNumToRender
初始批次中要渲染的項目數。這應該足以填滿屏幕,但不是更多。請注意,這些項目永遠不會作為窗口渲染的一部分卸載,以提高滾動到頂部操作的感知性能。
| TYPE | REQUIRED |
|---|---|
| number | No |
keyExtractor
(item: object, index: number) => string;
用於為指定索引處的給定項提取唯一鍵。密鑰用於緩存,並作為跟踪項目重新排序的反應鍵。默認提取器檢查item.key,然後回退到使用索引,就像React那樣。
| TYPE | REQUIRED |
|---|---|
| function | No |
maxToRenderPerBatch
每個增量渲染批處理中要呈現的最大項目數。一次渲染得越多,填充率就越好,但是我的遭受的響應能力因為渲染內容可能會干擾對按鈕點擊或其他交互的響應。
| TYPE | REQUIRED |
|---|---|
| number | No |
onEndReached
(info: {distanceFromEnd: number}) => void
當滾動位置在渲染內容的onEndReachedThreshold內時調用一次。
| TYPE | REQUIRED |
|---|---|
| function | No |
onEndReachedThreshold
距離末尾多少(以列表的可見長度為單位)列表的下邊緣必須來自內容的末尾才能觸發onEndReached回調。因此,當內容的結尾在列表的可見長度的一半之內時,值0.5將觸發onEndReached。
| TYPE | REQUIRED |
|---|---|
| number | No |
updateCellsBatchingPeriod
低 pri 項目渲染批次之間的時間量,例如用於渲染項目遠離屏幕的方式。類似的填充率/響應性權衡為 maxToRenderPerBatch。
| TYPE | REQUIRED |
|---|---|
| number | No |
windowSize
確定在可見區域外呈現的最大項目數,以可見長度為單位。因此,如果您的列表填滿屏幕,則windowSize = {21}(默認值)將呈現可見屏幕區域以及視口上方最多10個屏幕和10個屏幕。減少此數量將減少內存消耗並可能提高性能,但會增加快速滾動可能會顯示未呈現內容的瞬間空白區域的可能性。
| TYPE | REQUIRED |
|---|---|
| number | No |
disableVirtualization
已過時. 虛擬化提供了顯著的性能和內存優化,但完全卸載了渲染窗口之外的實例。您應該只需要禁用它以進行調試。
| TYPE | REQUIRED |
|---|---|
| No |
progressViewOffset
當需要偏移以使加載指示器正確顯示時設置此項。
| TYPE | REQUIRED | PLATFORM |
|---|---|---|
| number | No | Android |
Methods
scrollToEnd()
scrollToEnd(([params]: object));
scrollToIndex()
scrollToIndex((params: object));
scrollToItem()
scrollToItem((params: object));
scrollToOffset()
scrollToOffset((params: object));
滾動到列表中的特定內容像素偏移。
Param偏移期望偏移量滾動到。在水平為真的情況下,偏移是x值,在任何其他情況下,偏移是y值。
Param動畫(默認情況下為true)定義列表是否應在滾動時執行動畫。
Param偏移期望偏移量滾動到。在水平為真的情況下,偏移是x值,在任何其他情況下,偏移是y值。
Param動畫(默認情況下為true)定義列表是否應在滾動時執行動畫。
recordInteraction()
recordInteraction();
flashScrollIndicators()
flashScrollIndicators();

0 意見