React Native - 10 - 列表视图

React Native提供了一套用于呈现数据列表的组件。一般来说,你会想要使用FlatList或SectionList。

FlatList组件显示一个不断变化的但是结构相似的数据的滚动列表。 FlatList适用于很长的数据列表,其中项目的数量可能随时间而改变。与更普通的ScrollView不同,FlatList只渲染当前在屏幕上显示的元素,而不是一次渲染所有元素。

FlatList组件需要两个属性:data和renderItem。数据是列表信息的来源。 renderItem从源获取一个项目并返回一个格式化的组件来渲染。

这个例子创建了一个简单的硬编码数据FlatList。数据属性中的每个项目都呈现为文本组件。 FlatListBasics组件然后呈现FlatList和所有文本组件。

import React, { Component } from 'react';
import { FlatList, StyleSheet, Text, View } from 'react-native';

export default class FlatListBasics extends Component {
    render() {
        return (
            <View style={styles.container}>
                <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>}
                />
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        paddingTop: 22
    },
    item: {
        padding: 10,
        fontSize: 18,
        height: 44,
    },
})
image.png

如果要将一组数据渲染为逻辑部分(可能是部分标题,类似于iOS上的UITableView),则需要使用SectionList。

import React, { Component } from 'react';
import { SectionList, StyleSheet, Text, View } from 'react-native';

export default class SectionListBasics extends Component {
    render() {
        return (
            <View style={styles.container}>
                <SectionList
                sections={[
                    {title: 'D', data: ['Devin']},
                    {title: 'J', data: ['Jackson', 'James', 'Jillian', 'Jimmy', 'Joel', 'John', 'Julie']},
                ]}
                renderItem={({item}) => <Text style={styles.item}>{item}</Text>}
                renderSectionHeader={({section}) => <Text style={styles.sectionHeader}>{section.title}</Text>}
                keyExtractor={(item, index) => index}
                />
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        paddingTop: 22
    },
    sectionHeader: {
        paddingTop: 2,
        paddingLeft: 10,
        paddingRight: 10,
        paddingBottom: 2,
        fontSize: 14,
        fontWeight: 'bold',
        backgroundColor: 'rgba(247,247,247,1.0)',
    },
    item: {
        padding: 10,
        fontSize: 18,
        height: 44,
    },
})
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一个RIA拆页《非暴力沟通》P6-P7 为了彼此能乐于互助,我们专注于四个方面—非暴力沟通模式的四个要素。首先留...
    Fly_Catkin阅读 296评论 0 0
  • 1. People come in all shapes and sizes .They also come wi...
    应数二班田玉峰阅读 280评论 0 1
  • 泽泽自从学会了拍手,我们就老是教他唱歌的时候拍手打拍子,后来泽泽似睡非睡的时候就一只胳膊在挥舞着,好像打拍子一样,...
    绵绵泽泽阅读 178评论 0 0
  • 今天和老公在一起就半年啦,很开心。 记得和老公刚在一起的时候,每天都很害羞,因为老公总是时不时的撩我一下,对我很温...
    争夺阅读 294评论 0 0