react-native SectionList 使用詳解

勤做筆記那先,方便自己役电,幫助他人凶异。

屬性

  • ScrollView props... 集成了scrollview的屬性

  • sections 用來(lái)渲染的數(shù)據(jù)格了,類(lèi)似于 FlatList 中的data屬性看铆。
    數(shù)據(jù)格式如下:

[
    { title: 'a', data: ['a1', 'a2'] },
    { title: 'b', data: ['b1', 'b2','b3'] },
    { title: 'c', data: ['c1'] },
]
  • initialNumToRender 指定一開(kāi)始渲染的元素?cái)?shù)量,最好剛剛夠填滿(mǎn)一個(gè)屏幕盛末,這樣保證了用最短的時(shí)間給用戶(hù)呈現(xiàn)可見(jiàn)的內(nèi)容弹惦。注意這第一批次渲染的元素不會(huì)在滑動(dòng)過(guò)程中被卸載,這樣是為了保證用戶(hù)執(zhí)行返回頂部的操作時(shí)悄但,不需要重新渲染首批元素棠隐。

  • keyExtractor 一個(gè)不重復(fù)的key

  • renderItem 每一個(gè)section中的每一個(gè)列表項(xiàng)Item(參數(shù)名固定)

// item  列表項(xiàng)數(shù)據(jù) 
// index  列表項(xiàng)在section中的索引
// section  列表項(xiàng)的section索引
// separators:  {
//    highlight',
//    unhighlight,
//    updateProps:{
//        select,
//        newProps,
//    }
// } 
 renderItem={({ item, index, section, separators }) =>
  <View style={styles.itemView}>
    <Text >{item}</Text>
  </View>
}
  • onEndReached 當(dāng)列表被滾動(dòng)到距離內(nèi)容最底部不足onEndReachedThreshold的距離時(shí)調(diào)用。 一般用來(lái)實(shí)現(xiàn)加載更多算墨。

  • extraData 如果有除data以外的數(shù)據(jù)用在列表中(不論是用在renderItem還是Header或者Footer中)宵荒,請(qǐng)?jiān)诖藢傩灾兄付āM瑫r(shí)此數(shù)據(jù)在修改時(shí)也需要先修改其引用地址(比如先復(fù)制到一個(gè)新的Object或者數(shù)組中)净嘀,然后再修改其值报咳,否則界面很可能不會(huì)刷新。

  • ItemSeparatorComponent 行與行之間的分隔線(xiàn)組件挖藏。不會(huì)出現(xiàn)在第一行之前和最后一行之后

  • inverted 翻轉(zhuǎn)滾動(dòng)方向暑刃。實(shí)質(zhì)是將scale變換設(shè)置為-1。 [boolean]

  • legacyImplementation

  • ListEmptyComponent 當(dāng)列表數(shù)據(jù)為空時(shí)渲染的組件膜眠。

  • onEndReachedThreshold 決定當(dāng)距離內(nèi)容最底部還有多遠(yuǎn)時(shí)觸發(fā)onEndReached回調(diào)岩臣。注意此參數(shù)是一個(gè)比值而非像素單位。比如宵膨,0.5表示距離內(nèi)容最底部的距離為當(dāng)前列表可見(jiàn)長(zhǎng)度的一半時(shí)觸發(fā)架谎。

  • onRefresh 在列表頭部添加一個(gè)標(biāo)準(zhǔn)的RefreshControl控件,以便實(shí)現(xiàn)“下拉刷新”的功能辟躏。同時(shí)你需要正確設(shè)置refreshing屬性谷扣。

  • onViewableItemsChanged 在可見(jiàn)行元素變化時(shí)調(diào)用∩铀觯可見(jiàn)范圍和變化頻率等參數(shù)的配置請(qǐng)?jiān)O(shè)置viewabilityConfig屬性会涎。

  • refreshing 在等待加載新數(shù)據(jù)時(shí)將此屬性設(shè)為true,列表就會(huì)顯示出一個(gè)正在加載的符號(hào)瑞凑。

  • removeClippedSubviews

  • ListHeaderComponent 頭部組件末秃。

  • ListFooterComponent 尾部組件

  • renderSectionHeader 每個(gè)section的頭部組件。在iOS上籽御,這些headers是默認(rèn)粘接在ScrollView的頂部的(也可以通過(guò) stickySectionHeadersEnabled 來(lái)控制)

  • renderSectionFooter 每個(gè)組的尾部組件练慕。

  • SectionSeparatorComponent 類(lèi)似于ItemSeparatorComponent惰匙。 section 之間的間隙

  • stickySectionHeadersEnabled 當(dāng)下一個(gè)section把它的前一個(gè)section的可視區(qū)推離屏幕的時(shí)候,讓這個(gè)section的header粘連在屏幕的頂端贺待。這個(gè)屬性在iOS上是默認(rèn)可用的徽曲,因?yàn)檫@是iOS的平臺(tái)規(guī)范。(說(shuō)白了就是吸頂效果)

方法

  • scrollToLocation 滾動(dòng)列表到指定的區(qū)域(參數(shù)名固定)
 /**
     *
     * @param I Item 點(diǎn)擊事件傳遞過(guò)來(lái)的index
     * 'viewPosition' (number) - 為0時(shí)將這個(gè)列表項(xiàng)滾動(dòng)到可視區(qū)頂部 
     * (可能會(huì)被頂部粘接的header覆蓋), 
     * 為1時(shí)將它滾動(dòng)到可視區(qū)底部, 為0.5時(shí)將它滾動(dòng)到可視區(qū)中央麸塞。
     * 'viewOffset' (number) - 繼續(xù)偏移30像素的位置
     * 'sectionIndex' (number) - 第number個(gè)section
     * 'itemIndex' (number) - 的第number個(gè)item
     * 'animated' (boolean) -  是否啟用動(dòng)畫(huà)
     */
    scrollToLocation(i) {
        this.refs.SectionList.scrollToLocation({
            animated : true,
            itemIndex : 0,
            sectionIndex : i,
            viewOffset : 30
        })
    }
  • recordInteraction 主動(dòng)通知列表發(fā)生了一個(gè)事件,以使列表重新計(jì)算可視區(qū)域涧衙。比如說(shuō)當(dāng)waitForInteractions 為 true 并且用戶(hù)沒(méi)有滾動(dòng)列表時(shí)哪工,就可以調(diào)用這個(gè)方法。不過(guò)一般來(lái)說(shuō)弧哎,當(dāng)用戶(hù)點(diǎn)擊了一個(gè)列表項(xiàng)雁比,或發(fā)生了一個(gè)導(dǎo)航動(dòng)作時(shí),我們就可以調(diào)用這個(gè)方法撤嫩。
  • flashScrollIndicators 短暫地顯示滾動(dòng)指示器偎捎。
<SectionList
  keyExtractor={(item, index) => item + index}
  ref='SectionList'
  refreshControl={
    <RefreshControl
      refreshing={refreshing}
      onRefresh={this.onRefresh}
      tintColor={[CS.THEME11]}
      colors={[CS.THEME11]}
    />
  }
  refreshing={refreshing}
  sections={list}
  renderItem={({ item }) =>
    <Item
      del={() => this.fetchDel(item)}
      item={item}
      btnPress={() => this.goToSendMsg(item)}
    />
  }
  ListEmptyComponent={<NullPage text={'暫無(wú)圈好友'}/>}
  ListHeaderComponent={<Header data={}}/>}
  ListFooterComponent={<View style={{ height: 100 }}/>}
  renderSectionHeader={({ section }) =>
    <View style={{ height: 24 }}>
      <Text style={styles.sectionTitle}>{section.title}</Text>
    </View>
  }
  getItemLayout={this._getItemLayout}
/>

注意:

  • 當(dāng)某行滑出渲染區(qū)域之外后,其Item內(nèi)部狀態(tài)將不會(huì)保留序攘。
  • 本組件繼承自PureComponent而非通常的Component茴她,這意味著如果其props淺比較中是相等的,則不會(huì)重新渲染程奠。所以請(qǐng)先檢查你的renderItem函數(shù)所依賴(lài)的props數(shù)據(jù)(包括data屬性以及可能用到的父組件的state)丈牢,如果是一個(gè)引用類(lèi)型(Object或者數(shù)組都是引用類(lèi)型),則需要先修改其引用地址(比如先復(fù)制到一個(gè)新的Object或者數(shù)組中)瞄沙,然后再修改其值己沛,否則界面很可能不會(huì)刷新。
  • 為了保持滑動(dòng)的流暢距境,列表內(nèi)容會(huì)在屏幕外異步繪制申尼。所以快速滑動(dòng)有空白。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垫桂,一起剝皮案震驚了整個(gè)濱河市师幕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伪货,老刑警劉巖们衙,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異碱呼,居然都是意外死亡蒙挑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)愚臀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忆蚀,“玉大人,你說(shuō)我怎么就攤上這事〔鐾啵” “怎么了男旗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)欣鳖。 經(jīng)常有香客問(wèn)我察皇,道長(zhǎng),這世上最難降的妖魔是什么泽台? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任什荣,我火速辦了婚禮,結(jié)果婚禮上怀酷,老公的妹妹穿的比我還像新娘稻爬。我一直安慰自己,他們只是感情好蜕依,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布桅锄。 她就那樣靜靜地躺著,像睡著了一般样眠。 火紅的嫁衣襯著肌膚如雪友瘤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天吹缔,我揣著相機(jī)與錄音商佑,去河邊找鬼。 笑死厢塘,一個(gè)胖子當(dāng)著我的面吹牛茶没,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晚碾,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼抓半,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了格嘁?” 一聲冷哼從身側(cè)響起笛求,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糕簿,沒(méi)想到半個(gè)月后探入,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懂诗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蜂嗽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殃恒。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡植旧,死狀恐怖辱揭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情病附,我是刑警寧澤问窃,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站完沪,受9級(jí)特大地震影響域庇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丽焊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一较剃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧技健,春花似錦、人聲如沸惰拱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)偿短。三九已至欣孤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昔逗,已是汗流浹背降传。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勾怒,地道東北人婆排。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像笔链,于是被迫代替她去往敵國(guó)和親段只。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容