博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react-native 列表组件的简单学习
阅读量:6229 次
发布时间:2019-06-21

本文共 5027 字,大约阅读时间需要 16 分钟。

hot3.png

react-native 列表组件

react-native原有的listview因为性能的原因,逐步被SectionList和FlatList替换。 今天所有的演示的代码均可以通过进行下载 ##生成一个Demo App 在进行学习之前我们需要通过React Native CLI来生成一个名为ListViewDemo的项目 首先我们需要安装CLI

npm install -g react-native-clireact-native init ListViewDemocd ListViewDemo

设置模拟数据

为了正真实的展示效果,我们抓取了网上的真实数据来进行模拟。因为数据量过大的原因,不在此页面展示,可以通过git进行下载。 获取数据

const BabyNameData = require('../data.json')let instance = nullexport default class BabyNameApi {    //单例    constructor() {        if (instance) {            instance = this        }        return instance    }    getAllNames() {        let names = []        BabyNameData.data.map((row) => {            if (names.indexOf(row[10].toUpperCase()) < 0) {                names.push(row[10].toUpperCase())            }        })        return names.map((name) => { return { key: name } });    }    getAllNamesByYears(){        let results={}        let years=[]        BabyNameData.data.map((row) => {            if (years.indexOf(row[9]) < 0) {                years.push(row[9])            }        })        years.map((year) => {            results[year] = BabyNameData.data.filter((row) => { return row[9] === year })            results[year] = results[year].map((row) => { return { key: row[10].toUpperCase() } })        })         return years.map((year)=>{            return { title: year, data: results[year] }        })    }}

Flastlist

该组件仅简单的列表形式进行数据的展示

App.js

import React from 'react'import { StyleSheet, Text, View, FlatList } from 'react-native' import BabyNameApi from './api/babyNameApi' export default class App extends React.Component {  constructor(props) {    super(props)     this.babyNameApi = new BabyNameApi()    this.state = {      names: this.babyNameApi.getAllNames(),      namesByYear: this.babyNameApi.getAllNamesByYears()    }  }   render() {    return (      
{item.key}
} />
) }} const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', paddingTop: 20, },})

![屏幕快照 2018-01-10 21.29.54]( 2018-01-10 21.29.54.png)

上面仅展示了最基础的列表,我们可以通过设置一些简单的样式,使其看上去更加的美观。

render() {    return (      
{item.key}
} />
) }} const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', paddingTop: 20, }, row: { padding: 10, borderWidth: .5, borderColor: 'black', height: 50, fontSize: 18, }})

IMG_1640

我们可以通过下面的两个事件进行相应的交互

  • onPress 点击事件
  • onLongPress 长按事件
import { StyleSheet, Text, View, FlatList, Alert } from 'react-native'...  render() {    return (      
Alert.alert(item.key + ' pressed!')} onLongPress={() => Alert.alert(item.key + ' long pressed!')} style={styles.row}> {item.key}
} />
) }...

IMG_1641

IMG_1642

SectionList

SectionList不仅能够展示列表,还可以显示带有标题的列表。

/** * Sample React Native App * https://github.com/facebook/react-native * @flow */import React, { Component } from 'react';import {  Platform,  StyleSheet,  Text,  View,  SectionList,  FlatList,  Alert,  RefreshControl} from 'react-native';import BabyNameApi from './api/babyNameApi';export default class App extends Component<{}> {  constructor(props){    super(props);    this.BabyNameApi=new BabyNameApi();    this.state={      names:this.BabyNameApi.getAllNames(),      namesByYear:this.BabyNameApi.getAllNamesByYears(),      refreshing:false    }  }  render() {    return (      
{ this.setState({refreshing:true}) setTimeout(() => { this.setState({refreshing:false}) }, 2000); }} /> } sections={this.state.namesByYear} renderItem={({item}) =>
{item.key}
} renderSectionHeader={({section}) =>
{section.title}
} />
); }}const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', paddingTop: 20, }, row: { padding: 10, borderWidth: .5, borderColor: 'black', height: 50, fontSize: 18, }, header: { padding: 12, backgroundColor: 'gray', fontSize: 36, fontWeight: 'bold', height: 60 }});

![屏幕快照 2018-01-10 22.26.57]( 2018-01-10 22.26.57.png) ![屏幕快照 2018-01-10 22.27.03]( 2018-01-10 22.27.03.png)

下面的代码主要的功能是渲染头部的部分 sections:表示用来渲染的数据 renderSectionHeader:每个section的头部渲染的内容

sections={this.state.namesByYear}  renderSectionHeader=  {({section}) =>   
{section.title}
}

列表项渲染的内容

renderItem={({item}) =>
{item.key}
}

下拉刷新 refreshing:是否在下拉的时候显示加载的服务 onRefresh:下拉时会触发的事件,简单通过setTimeout来让其二秒后自动消失 ![屏幕快照 2018-01-10 22.33.49]( 2018-01-10 22.33.49.png)

{ this.setState({refreshing:true}) setTimeout(() => { this.setState({refreshing:false}) }, 2000); }} /> }

转载于:https://my.oschina.net/u/215677/blog/1605361

你可能感兴趣的文章
滚动条滚动到底部触发事件
查看>>
『SharePoint 2010』Sharepoint 2010 Form 身份认证的实现(基于SQL)
查看>>
python之模块pydoc
查看>>
ASP.NET MVC 下拉列表使用小结
查看>>
nodejs基础 -- NPM 使用介绍
查看>>
Loadrunner中关联的作用:
查看>>
(转)BT1120接口及协议
查看>>
Robot Framework与Web界面自动化测试学习笔记:定位到新窗口
查看>>
The Dataflow Model 论文
查看>>
Linux守护进程
查看>>
遇到没“人性”的管理:你真可怜!
查看>>
http://www.bootcss.com/p/font-awesome/
查看>>
新浪微博UWP UI意见征求
查看>>
使用ServiceStack构建Web服务
查看>>
Linqer工具
查看>>
table中超过长度的列,显示省略号
查看>>
Qtcreator中经常使用快捷键总结
查看>>
可扩展Web架构与分布式系统(转)
查看>>
KVM虚拟机的安装
查看>>
【转】PHP中require和include路径问题总结
查看>>