FlatList列表组件的使用

Posted itgezhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FlatList列表组件的使用相关的知识,希望对你有一定的参考价值。

PaymentChannelScreen.js

/**
 *Created by lixingru on 2020/4/14
 */
import React, { Component, PureComponent } from ‘react‘;
import {
    StyleSheet,
    Text,
    Image,
    View,
    ScrollView,
    FlatList,
    TouchableOpacity,
    Dimensions
} from ‘react-native‘;
import {Cruserinfo} from "../child/ChargeRecordView"
import LoadingView from "../../../../component/Loading";
import * as api from "../../../../networking/Api";

//绑定银行卡列表
class PaymentChannelItemView extends Component {
    _onPress = ()=>{
        const { ChannelItem ,navigation} = this.props
        navigation.navigate(‘selectBank‘,{ data: {
            ChannelItem:ChannelItem,
            customerId:this.props.navigation.state.params.data.customer_id,
            nameAndIdCard:this.props.navigation.state.params.data,
            phoneNumber:this.props.navigation.state.params.data.phoneNumber

        }})
    }

    render() {
        const { channelPayName } = this.props.ChannelItem
        return (
            <View style={styles.Channel}>
                <TouchableOpacity style={styles.ChannelItem} onPress={this._onPress}>
                    <Text style={{fontSize:18}}>{channelPayName}</Text>
                </TouchableOpacity>
            </View>
        )
    }
}

const windowHeight = Dimensions.get(‘window‘).height;
export default class PaymentChannelScreen extends Component {
    constructor() {
        super(...arguments)
        this.state = {
            isLoading:false,
            data: []
        }
    }

    componentDidMount(){
        //一进入页面请求数据并展示列表
        this.fetchData()      
        console.log(‘+_+_+_:‘,this.props.navigation.state.params)
    }

    //渲染列表子项
    _renderItem = ({ item, index }) => {
        return ( 
            <PaymentChannelItemView navigation={this.props.navigation} 
            ChannelItem={item}></PaymentChannelItemView>
        )
    }

    // 刷新数据
    fetchData = async () => {
        // 开始请求数据时显示加载控件
        this.setState({
            isLoading: true,
        })
        const userId =  await EDMoney.getUserId()
        api.selectAllCapitalChannel(userId)
        .then((res) => {
            //请求成功后刷新数据
            this.setState({
                data: res.data,
            })
            //请求成功0.4秒后,刷新控件消失
            setTimeout(()=>{
                this.setState({
                    isLoading: false,
                })
            },400); 
        })
        .catch((error) => {
            //请求失败0.4秒后,刷新控件消失
            setTimeout(()=>{
                this.setState({
                    isLoading: false,
                })
            },400); 
            if (error.errors) {
                EDMoney.Toast.show(error.errors._error)
            } else {
                EDMoney.Toast.show(‘网络错误‘)
            }
        })
    }

    /*没有数据时显示的组件*/
    listEmptyComponent() {
        return <View style={{backgroundColor: ‘#fff‘, flex: 1,height:windowHeight}}>
                    <Text style={{
                        alignItems: ‘center‘,
                        textAlign: ‘center‘,
                        color: ‘#e6e6e6‘,
                        fontSize:18,
                        lineHeight:windowHeight-75
                    }}
                    >
                    暂无授权信息
            </Text>
        </View>
    }
    render() {
        return (
            <View style={styles.root}>
                <View style={styles.list}>
                    <FlatList
                            data={this.state.data}
                            extraData={this.state}
                            initialNumToRender={10}
                            keyExtractor={(item, index) => item.key}
                            renderItem={this._renderItem}
                            ListEmptyComponent={this.listEmptyComponent} // 没有数据时显示的界面
                            refreshing={this.state.isLoading}// 是否刷新 ,属自带刷新控件,refreshing值为true时显示刷新控件
                            onRefresh={()=>{this.fetchData()}}// 刷新方法,写了此方法,下拉才会出现  刷新控件,使用此方法必须写 refreshing
                            // ListFooterComponent={this._renderFooter()}
                        />
                </View>
            </View>
        )
    }
}



const styles = StyleSheet.create({
    root:{
        flex: 1,
        backgroundColor:‘#f0f0f0‘
    },
    list:{
        flex: 1,
    },
    Channel:{
        borderTopWidth:1,
        borderTopColor:‘#e6e6e6‘,
        marginBottom: 6
    },
    ChannelItem:{
        height:60,
        backgroundColor:‘#fff‘,
        paddingLeft:10,
        borderBottomWidth:1,
        borderBottomColor:‘#e6e6e6‘,
        borderStyle:‘solid‘,
        justifyContent: ‘center‘,
        alignItems: ‘center‘,
        
    }
})

 

以上是关于FlatList列表组件的使用的主要内容,如果未能解决你的问题,请参考以下文章

FlatList列表组件的使用

RN FlatList使用详解及源码解析

ReactNative进阶(四十一):应用FlatList实现分组列表

ReactNative: 使用列表组件ListView组件

在 FlatList 中获取渲染视频的参考

React-native flatlist 在 isLoading 上的组件之间共享道具