react-native 的ListView

虽然说ListView 快废弃了 但是花了一晚上事情去研究这个东西 还是想要记录一下。 权当 其他组件的指南吧。

import React,{Component} from 'react';
import {View, Text,StyleSheet, TouchableOpacity,Image,ListView,RefreshControl} from 'react-native';
import NavigationBar from "./NavigationBar"
import Toast,{DURATION} from 'react-native-easy-toast' // toast标签必须放在组件的最后  DURATION 作为补充属性存在
const data= {"list": [
    {
      "id": 1,
      "key": 1,
      "name": "James Martin",
      "age": 18,
    },
    {
      "id": 2,
      "key": 2,
      "name": "Cynthia Anderson",
      "age": 14,
    },
    {
      "id": 3,
      "key": 3,
      "name": "Scott Martinez",
      "age": 19,
    },
    {
      "id": 4,
      "key": 4,
      "name": "Jason Walker",
      "age": 19,
    },
    {
      "id": 5,
      "key": 5,
      "name": "Timothy Gonzalez",
      "age": 18,
    }
  ],}

export default class ListViewTest extends Component{
  constructor(props){
    super(props)
    const ds = new ListView.DataSource({rowHasChanged:(r1,r2)=>r1!==r2}) // 四种数据获取方式 ,这边选择row的渲染方式如果连个row的数据不相等,那么渲染
    this.state={
      word:'',
      dataSource:ds.cloneWithRows(data.list), // ListView.DataSource 不能直接操作数据必须通过克隆的方式 操作副本;
      isLoading:true
    }
    this.onLoad();
  }
  renderRows(item){  //  toast 包裹点击元素的点击事件; DURATION.LENGTH_SHORT toast的显示时间;
    return (<View style={styles.row}>
      <TouchableOpacity onPress={()=>{
        this.toast.show(`单击了${item.name}`,DURATION.LENGTH_SHORT)
      }}>
      <Text>{item.name}</Text>
      <Text>{item.age}</Text>
      </TouchableOpacity>
    </View>)
  }
  renderSeparator(sectionId,rowId,adh){  // 渲染 分隔线
     return (<View style={styles.line} key={rowId}></View>)
  }
  renderFooter(){  // 渲染图片, 图片是网络图片必须 有宽高,而且是uri 引用
    return <Image style={{width:100,height:100}} source={{uri:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1545152832467&di=7e0e6976d0d3a2284f96d59f09692adf&imgtype=0&src=http%3A%2F%2Fmedia.giphy.com%2Fmedia%2FqW3iR9I30ndCM%2Fgiphy-tumblr.gif'}}/>
  }
  onLoad(){ // 模拟异步
    setTimeout(()=>{
      this.setState({isLoading:false})
    },2000)
  }
  render ( ){
    return (<View >
      <NavigationBar
          title='ListView'
          style={{backgroundColor:'blue'}}

      />
        <ListView
          dataSource={this.state.dataSource}//关联state中的datasource
          renderRow={(item) =>this.renderRows(item)}//制定listView的显示效果 返回 函数的执行结果
          showVerticalScrollIndicator={false}  // 显示垂直滚动条
          renderSeparator ={(sectionId,rowId,adh)=>this.renderSeparator(sectionId,rowId,adh)} // 渲染分割线
          renderFooter={()=>this.renderFooter()}  // 选择尾部
          refreshControl={<RefreshControl       // 下拉刷新的组件
              refreshing={this.state.isLoading}   // 是否 刷新中
              onRefresh={()=>this.onLoad}   // 操作刷新时 的钩子函数
          />}

        />
      <Toast
          ref={toast=>{this.toast=toast}} 
      />
    </View>)
  }
}

const styles =  StyleSheet.create({
  container:{
    backgroundColor:'gray',
    justifyContent:'center',
  },
  text:{
    fontSize:20,
  },
  row:{
    height:50
  },
  line:{
    height:1,
    backgroundColor:"black"
  }
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值