React Native 學(xué)習(xí)之ListView(一)

Demo展示

1.gif

實(shí)現(xiàn)步驟

對(duì)于原生Android來(lái)說(shuō)奠伪,數(shù)據(jù)的列表展示也是用ListView目溉,對(duì)于IOS來(lái)說(shuō)弱左,則是用cell來(lái)展示列表數(shù)據(jù)代嗤,而在RN中也是用ListView棘钞。雖然是不同的平臺(tái),但對(duì)于列表顯示來(lái)說(shuō)干毅,都需要提供數(shù)據(jù)源宜猜,并且還需要?jiǎng)?chuàng)建這個(gè)列表控件的對(duì)象

準(zhǔn)備數(shù)據(jù)源

ListView顯示本地?cái)?shù)據(jù),由于數(shù)據(jù)較多硝逢,我們不可能把它寫(xiě)在代碼中姨拥,所以我們會(huì)把它放在一個(gè)json文件,然后去讀取數(shù)據(jù)渠鸽,如下面的Wine.json:

[
  {
    "image": "one",
    "money": "39",
    "name": "德國(guó)OETTINGER奧丁格大麥啤酒500ml*4罐/組"
  },
  {
    "image": "two",
    "money": "40",
    "name": "德拉克(Durlacher) 黑啤酒 330ml*6聽(tīng)"
  }
  ...
]

那如何去獲取這些數(shù)據(jù)了叫乌?很簡(jiǎn)單,只需要在代碼中引入這個(gè)js文件就可以了拱绑,如:

var data = require('./Wine.json');
初始化ListView
constructor(props) {
    super(props);
    //獲取ListView數(shù)據(jù)源
    var data = this.props.data;
    //創(chuàng)建ListView對(duì)象
    var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
    this.state = {
        //將數(shù)據(jù)源與ListView對(duì)象進(jìn)行綁定
        dataSource: ds.cloneWithRows(data)
    };
}

我是將ListView組件進(jìn)行了封裝,所以需要獲取從index.android.js文件中傳遞過(guò)來(lái)的數(shù)據(jù)源丽蝎。一般的初始化工作都是在一個(gè)組件的構(gòu)造方法來(lái)完成的猎拨,這是ES6的寫(xiě)法。rowHasChanged: (r1, r2) => r1 !== r2這句代碼是用來(lái)控制item數(shù)據(jù)的更新屠阻,當(dāng)且僅當(dāng)任意兩行數(shù)據(jù)不相等時(shí)才去更新數(shù)據(jù)源红省。這里是RN中的一個(gè)性能優(yōu)化。

渲染ListView
render() {
    return (
        <ListView
            //數(shù)據(jù)源就是我們初始化的值
            dataSource={this.state.dataSource}
            //這是一個(gè)ListView中的一個(gè)回調(diào)方法
            renderRow={this.renderRow.bind(this)}
        />
    );
}
//我們重寫(xiě)了ListView的renderRow方法国觉,所以我們可以拿到系統(tǒng)提供給我們的一些參數(shù)吧恃,如:rowData等
renderRow(rowData, sectionID, rowID, highlightRow) {
    return (
        <TouchableOpacity activeOpacity={0.5}
                          style={{height: 90}}
                          onPress={this.show.bind(this, rowData.name)}>
            <View style={styles.container}>
                <Image source={{uri: rowData.image}}
                       style={styles.image}
                       resizeMode="contain"
                />
                <View>
                    <Text style={styles.title}>{rowData.name}</Text>
                    <Text style={styles.subTitle}>¥{rowData.money}</Text>
                </View>
            </View>
        </TouchableOpacity>
    );
}

注意

  • 上面的代碼中有加載靜態(tài)圖片,我這里是用動(dòng)態(tài)的方式來(lái)加載的麻诀,所以需要在android/app/src/main/res文件下新建一個(gè)drawable文件夾痕寓,將圖片放在里面,并且名稱需要與json文件里面的圖片名稱保持一致蝇闭。
  • 因?yàn)槲沂菃为?dú)將ListView組件封裝成一個(gè)js文件呻率,所以并不能拿到this對(duì)象,所以需要在系統(tǒng)回調(diào)renderRow時(shí)將this傳遞進(jìn)來(lái)呻引,也就是通過(guò)bind方法礼仗,不然后面用this.show會(huì)報(bào)錯(cuò)

好了,ListView的初步使用就學(xué)習(xí)完了。完整代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末元践,一起剝皮案震驚了整個(gè)濱河市韭脊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌单旁,老刑警劉巖沪羔,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異慎恒,居然都是意外死亡任内,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)融柬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)死嗦,“玉大人,你說(shuō)我怎么就攤上這事粒氧≡匠” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵外盯,是天一觀的道長(zhǎng)摘盆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)饱苟,這世上最難降的妖魔是什么孩擂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮箱熬,結(jié)果婚禮上类垦,老公的妹妹穿的比我還像新娘。我一直安慰自己城须,他們只是感情好蚤认,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著糕伐,像睡著了一般砰琢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上良瞧,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天陪汽,我揣著相機(jī)與錄音,去河邊找鬼褥蚯。 笑死掩缓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的遵岩。 我是一名探鬼主播你辣,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼巡通,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了舍哄?” 一聲冷哼從身側(cè)響起宴凉,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體疆导,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年籽暇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饭庞。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戒悠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舟山,到底是詐尸還是另有隱情绸狐,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布累盗,位于F島的核電站寒矿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏若债。R本人自食惡果不足惜符相,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蠢琳。 院中可真熱鬧啊终,春花似錦、人聲如沸挪凑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)躏碳。三九已至,卻和暖如春散怖,著一層夾襖步出監(jiān)牢的瞬間菇绵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工镇眷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咬最,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓欠动,卻偏偏與公主長(zhǎng)得像永乌,于是被迫代替她去往敵國(guó)和親惑申。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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