iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 10
1
Modern Web

React Native 航向真全端,建構雙平台 App系列 第 10

React Native 基礎元件 <ListView> 簡介

  • 分享至 

  • xImage
  •  

ListView 是最適合用來顯示重複數據的一種元件,ListView 他不會一次把所有數據顯示出來,而是有在螢幕上的資料他才會顯示出來,所以在效能上會比較好。

ListView 有兩個必須的 props dataSource和renderRow。dataSource是列表的數據,而 renderRow 則是要顯示時會把需要的數據傳下去讓 dump Component 來顯示。

ListView

使用 SOP: import { ListView } from react-native;
使用範例

<ListView
  dataSource={dataSource}
  renderRow={(rowData) => <ButtonSample buttonText={rowData} />}
/>

dataSource 就是這個 List 預計要顯示的全部資料
renderRow 就是每個 ListItem 要長怎樣,可以想像成他是一個 for 迴圈遍歷整個 array 然後把值塞進去 dump Component 之中作為顯示。

完整範例


import React, { Component } from 'react';
import {
  StyleSheet,
  View,
  ListView,
} from 'react-native';
import ButtonSample from './ButtonSample';

export default (props) => {
  const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
  const dataSource = ds.cloneWithRows([
    'Button1', 'Button2', 'Button3', 'Button4'
  ]);
  return (
    <View style={styles.center}>
      <ListView
        dataSource={dataSource}
        renderRow={(rowData) => <ButtonSample buttonText={rowData} />}
      />
    </View>
  );
}

const styles = StyleSheet.create({
  center: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    paddingTop: 10,
  },
  button: {
    margin: 20,
    padding: 10,
    paddingLeft: 20,
    paddingRight: 20,
    backgroundColor: '#406E9F',
    borderRadius: 9,
    alignItems: 'center',
    justifyContent: 'center',
  },
  buttonText: {
    color: '#fff',
    fontSize: 20,
    fontWeight: 'bold',
  },
});

結果會長這樣
http://ithelp.ithome.com.tw/upload/images/20161225/201033412QjcXosO10.png

其中 rowHasChanged 也是 ListView 必須的 function 之一,這裡我們用 (r1, r2) => r1 !== r2} 讓他可以簡單的判斷輸每個 ListItem 有無變化來更改 render 的內容。


有問題歡迎來 React Native Taiwan 問喔
創科資訊


上一篇
React Native 基礎元件 <Button>、<TouchableOpacity> 簡介
下一篇
React Native 基礎元件 <TextInput> 簡介
系列文
React Native 航向真全端,建構雙平台 App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言