使用FlatList构建列表-阿里云开发者社区

开发者社区> 云原生> 正文
登录阅读全文

使用FlatList构建列表

简介: 接着上一篇 使用react-native-tab-navigator切换页面 当前首页页面内容是空的,只有一个背景色。下面我们来添加些内容。 这里使用 FlatList 来渲染列表。

接着上一篇 使用react-native-tab-navigator切换页面
当前首页页面内容是空的,只有一个背景色。下面我们来添加些内容。
这里使用 FlatList 来渲染列表。(注:很多教程包含视频中是使用 ListView 构建内容列表的。这个已经被弃用)
步骤如下图非常简单:

  1. 引入FlatList
  2. 写一个 getPageHomeList 方法,可以看到FlatList接收的data属性表示数据源
    renderItem表示渲染每条数据的回调方法。这里用Text组件包裹下每条数据。
  getPageHomeList() {
    return (
      <FlatList
        data={[
          {key: 'Devin'},
          {key: 'Jackson'},
          {key: 'James'},
          {key: 'Joel'},
          {key: 'John'},
          {key: 'Jillian'},
          {key: 'Jimmy'},
          {key: 'Julie'},
        ]}
        renderItem={({item}) => <Text style={styles.item}>{item.key}</Text>}
      />
    );
  }
img_878457ca91a0320db1d3cb7c408114ee.png
image.png
  1. 最终把这个方法嵌到View中展示
    完整代码如下:
import React from 'react';
import TabNavigator from 'react-native-tab-navigator';
import { StyleSheet, Text, TextInput, View, Image, FlatList } from 'react-native';

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {selectedTab: 'home'};
  }

  getPageHomeList() {
    return (
      <FlatList
        data={[
          {key: 'Devin'},
          {key: 'Jackson'},
          {key: 'James'},
          {key: 'Joel'},
          {key: 'John'},
          {key: 'Jillian'},
          {key: 'Jimmy'},
          {key: 'Julie'},
        ]}
        renderItem={({item}) => <Text style={styles.item}>{item.key}</Text>}
      />
    );
  }

  render() {
    return (
      <View style={styles.container}>
        <TabNavigator>
          <TabNavigator.Item
            selected={this.state.selectedTab === 'home'}
            title="最热"
            renderIcon={() => <Image style={styles.image} source={require('./res/images/ic_polular.png')} />}
            renderSelectedIcon={() => <Image style={styles.image} source={require('./res/images/ic_polular.png')} />}
            badgeText="1"
            onPress={() => this.setState({ selectedTab: 'home' })}>
            <View style={styles.page1}>
              {this.getPageHomeList()}
            </View>
          </TabNavigator.Item>
          <TabNavigator.Item
            selected={this.state.selectedTab === 'profile'}
            title="趋势"
            renderIcon={() => <Image style={styles.image} source={require('./res/images/ic_trending.png')} />}
            renderSelectedIcon={() => <Image style={styles.image} source={require('./res/images/ic_trending.png')} />}
            onPress={() => this.setState({ selectedTab: 'profile' })}>
            <View style={styles.page2}></View>
          </TabNavigator.Item>
        </TabNavigator>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#F5FCFF',
  },
  page1: {
    flex: 1,
    backgroundColor: 'red'
  },
  page2: {
    flex: 1,
    backgroundColor: 'yellow'
  },
  item: {
    padding: 10,
    fontSize: 18,
    height: 44,
  },
  image: {
    height: 22,
    width: 22
  }
});

文章里还介绍了比FlatList稍微复杂些的 SectionList 组件。当需要对item进行分组,支持设置每个分组的header,footer。
这个非常适合用来做通讯录,城市地址

img_812ad9626108980b7eb1878122e2ac54.gif
demo.gif

参考文档:

参考:
http://facebook.github.io/react-native/docs/using-a-listview.html
http://blog.csdn.net/mengks1987/article/details/70229918

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生
使用钉钉扫一扫加入圈子
+ 订阅

云原生时代,是开发者最好的时代

其他文章