FlatList

官方文檔 中文 React Native Express

以下內容來自官網高性能的列表組件 只渲染顯示於螢幕內的內容,只更新資料有變動的item 支持以下常用功能:

  • 完全跨平台

  • 水平佈局

  • 行組件顯示或隱藏時可配置回調事件

  • 列表的頭部組件

  • 列表的尾部組件

  • 自定義行間分隔線

  • 下拉刷新

  • 上拉加載

  • 跳轉到指定的index(第index個item)

    • 此方法必須設置getItemLayout。getItemLayout中需帶入每個item的高度,目前找到的都是固定item高度,若item的高度是動態的情況下..尚無頭緒..

    • length=>當前item的高度 offset=>目前總高度

      getItemLayout={(data, index) => (
       {length: ITEM_HEIGHT, offset: ITEM_HEIGHT * index, index}
      )}

例子

最簡單的例子

較複雜的例子

演示如何利用PureComponent來進一步優化性能和減少bug產生的可能(這段需要了解shouldComponentUpdate的機制,以及Component和PureComponent的不同)

  • 對於MyListItem組件來說,其onPressItem屬性使用箭頭函數而非bind的方式進行綁定,使其不會在每次列表重新render時生成一個新的函數,從而保證了props的不變性(當然前提是id、selected和title也沒變),避免了觸發自身無謂的重新render。換句話說,如果你是用bind來綁定onPressItem,每次都會生成一個新的函數,導致props在===比較時返回false,從而觸發自身的一次不必要的重新render。

  • 給FlatList指定extraData={this.state}屬性,是為了保證state.selected變化時,能夠正確觸發FlatList的更新。如果不指定此屬性,則FlatList不會觸發更新,因為它是一個PureComponent,其props在===比較中沒有變化則不會觸發更新。

  • keyExtractor屬性指定使用id作為列表每一項的key。

給予的data若有變動,請使用...data 此方法給予新的data,通知flatlist資料有變動

sample code

參考

Last updated