React Native組件--ListView

簡介

ListView - 一個(gè)核心組件荞膘,用于高效地顯示一個(gè)可以垂直滾動(dòng)的變化的數(shù)據(jù)列表。最基本的使用方式就是創(chuàng)建一個(gè)ListView.DataSource數(shù)據(jù)源,然后給它傳遞一個(gè)普通的數(shù)據(jù)數(shù)組,再使用數(shù)據(jù)源來實(shí)例化一個(gè)ListView組件卿啡,并且定義它的renderRow回調(diào)函數(shù),這個(gè)函數(shù)會(huì)接受數(shù)組中的每個(gè)數(shù)據(jù)作為參數(shù)菱父,返回一個(gè)可渲染的組件(作為listview的每一行)牵囤。

基本用法

constructor(props) {
    super(props);

    var 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>}
    />
 );
}

換一種寫法并添加點(diǎn)擊事件

    class ListViewSample extends Component {

      constructor(props) {
        super(props);
        var 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={this._renderRow.bind(this)}
          />
        );
      }

      _renderRow(rowData : string , rowID : number){
         return (
           <TouchableHighlight onPress={() => this._pressRow(rowData, rowID)}>
             <View>
               <Text>
                 {rowData}
               </Text>
             </View>
           </TouchableHighlight>
         );
      } 

      _pressRow(url: string, rowID: number){
          this._alert(url);
          
          switch (rowID) {
            case 0:
              break;
            case 1:
              break;
            default:
              break;
          }
      }

      _alert(url : string){
         AlertIOS.alert(
          '提醒',
          ''+ url,
          [{text: 'Cancle', onPress: () => console.log('Foo Pressed!')},
          {text: 'OK', onPress: () => console.log('Bar Pressed!')},]
         );
      }

    }

屬性

View屬性

ScrollView 相關(guān)屬性樣式全部繼承

dataSource ListViewDataSource

ListView.DataSource實(shí)例(列表依賴的數(shù)據(jù)源)

initialListSize number

指定在組件剛掛載的時(shí)候渲染多少行數(shù)據(jù)。用這個(gè)屬性來確保首屏顯示合適數(shù)量的數(shù)據(jù)滞伟,而不是花費(fèi)太多幀逐步顯示出來揭鳞。

在ListView標(biāo)簽下添加:
initialListSize = {10}

onEndReachedThreshold

調(diào)用onEndReached之前的臨界值,單位是像素梆奈。

<a>PS:這個(gè)值如果不設(shè)置會(huì)導(dǎo)致onEndReached無法正常使用</a>

pageSize

每次事件循環(huán)(每幀)渲染的行數(shù)野崇。

在ListView標(biāo)簽下添加:
pageSize = {10}

removeClippedSubviews

用于提升大列表的滾動(dòng)性能。需要給行容器添加樣式overflow:'hidden'亩钟。(Android已默認(rèn)添加此樣式)乓梨。此屬性默認(rèn)開啟。

scrollRenderAheadDistance number

當(dāng)一個(gè)行接近屏幕范圍多少像素之內(nèi)的時(shí)候清酥,就開始渲染這一行扶镀。

方法

renderFooter renderHeader

頁頭與頁腳會(huì)在每次渲染過程中都重新渲染(如果提供了這些屬性)。如果它們重繪的性能開銷很大焰轻,把他們包裝到一個(gè)StaticContainer或者其它恰當(dāng)?shù)慕Y(jié)構(gòu)中臭觉。頁腳會(huì)永遠(yuǎn)在列表的最底部,而頁頭會(huì)在最頂部。

onEndReached

當(dāng)所有的數(shù)據(jù)都已經(jīng)渲染過蝠筑,并且列表被滾動(dòng)到距離最底部不足onEndReachedThreshold個(gè)像素的距離時(shí)調(diào)用狞膘。原生的滾動(dòng)事件會(huì)被作為參數(shù)傳遞。譯注:當(dāng)?shù)谝淮武秩緯r(shí)什乙,如果數(shù)據(jù)不足一屏(比如初始值是空的)挽封,這個(gè)事件也會(huì)被觸發(fā)。

onChangeVisibleRows

當(dāng)可見的行的集合變化的時(shí)候調(diào)用此回調(diào)函數(shù)臣镣。visibleRows 以 { sectionID: { rowID: true }}的格式包含了所有可見行辅愿,而changedRows 以{ sectionID: { rowID: true | false }}的格式包含了所有剛剛改變了可見性的行,其中如果值為true表示一個(gè)行變得可見忆某,而為false表示行剛剛離開可視區(qū)域而變得不可見点待。

renderRow

從數(shù)據(jù)源(Data source)中接受一條數(shù)據(jù),以及它和它所在section的ID褒繁。返回一個(gè)可渲染的組件來為這行數(shù)據(jù)進(jìn)行渲染。默認(rèn)情況下參數(shù)中的數(shù)據(jù)就是放進(jìn)數(shù)據(jù)源中的數(shù)據(jù)本身馍忽,不過也可以提供一些轉(zhuǎn)換器棒坏。

如果某一行正在被高亮(通過調(diào)用highlightRow函數(shù)),ListView會(huì)得到相應(yīng)的通知遭笋。當(dāng)一行被高亮?xí)r坝冕,其兩側(cè)的分割線會(huì)被隱藏。行的高亮狀態(tài)可以通過調(diào)用highlightRow(null)來重置瓦呼。

renderSeparator

如果提供了此屬性喂窟,一個(gè)可渲染的組件會(huì)被渲染在每一行下面,除了小節(jié)標(biāo)題的前面的最后一行央串。在其上方的小節(jié)ID和行ID磨澡,以及鄰近的行是否被高亮?xí)鳛閰?shù)傳遞進(jìn)來。

效果

屏幕快照 2016-06-22 20.32.34.png

引用:http://reactnative.cn/docs/0.27/getting-started.html#content

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末质和,一起剝皮案震驚了整個(gè)濱河市稳摄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饲宿,老刑警劉巖厦酬,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘫想,居然都是意外死亡仗阅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門国夜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來减噪,“玉大人,你說我怎么就攤上這事⌒ⅲ” “怎么了鸠按?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饶碘。 經(jīng)常有香客問我目尖,道長,這世上最難降的妖魔是什么扎运? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任瑟曲,我火速辦了婚禮,結(jié)果婚禮上豪治,老公的妹妹穿的比我還像新娘洞拨。我一直安慰自己,他們只是感情好负拟,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布烦衣。 她就那樣靜靜地躺著,像睡著了一般掩浙。 火紅的嫁衣襯著肌膚如雪花吟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天厨姚,我揣著相機(jī)與錄音衅澈,去河邊找鬼。 笑死谬墙,一個(gè)胖子當(dāng)著我的面吹牛今布,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拭抬,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼部默,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了造虎?” 一聲冷哼從身側(cè)響起甩牺,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎累奈,沒想到半個(gè)月后贬派,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澎媒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年搞乏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戒努。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡请敦,死狀恐怖镐躲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侍筛,我是刑警寧澤萤皂,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站匣椰,受9級(jí)特大地震影響裆熙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜禽笑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一入录、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佳镜,春花似錦僚稿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啊掏,卻和暖如春蠢络,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脖律。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工谢肾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腕侄,地道東北人小泉。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像冕杠,于是被迫代替她去往敵國和親微姊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • 前言 學(xué)習(xí)本系列內(nèi)容需要具備一定 HTML 開發(fā)基礎(chǔ)分预,沒有基礎(chǔ)的朋友可以先轉(zhuǎn)至 HTML快速入門(一) 學(xué)習(xí) 本人...
    珍此良辰閱讀 13,353評(píng)論 11 24
  • 一. 簡介 一個(gè)核心組件兢交,用于高效地顯示一個(gè)可以垂直滾動(dòng)的變化的數(shù)據(jù)列表。最基本的使用方式就是創(chuàng)建一個(gè)ListVi...
    飛奔的小馬閱讀 1,250評(píng)論 0 2
  • 此文章中笼痹,包括簡單的布局配喳,九宮格布局和頭視圖的使用小demo 前言 在iOS開發(fā)中,用的最多的一個(gè)控件就是Tabl...
    Zax_Smile閱讀 4,130評(píng)論 15 22
  • 2017年8月9日 梧桐居慢讀 《非暴力溝通》摘錄 第一章 讓愛融入生活 非暴力溝通的四個(gè)要素: 1.觀察 2.感...
    梧桐居閱讀 215評(píng)論 0 0
  • 平步緩升入巔峰 俯視齊魯傲蒼穹 眾人皆癡紅塵事 不知天外有仙閣 碧瓦飛甍琉璃殿 玉獅鎮(zhèn)門龍繞梁 軒榭樓臺(tái)幾許處 仙...
    311a949b5048閱讀 323評(píng)論 0 0