欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React-Native實(shí)現(xiàn)ListView組件之上拉刷新實(shí)例(iOS和Android通用)

 更新時(shí)間:2017年07月11日 16:55:40   作者:coder_小刀  
本篇文章主要介紹了React-Native實(shí)現(xiàn)ListView組件之上拉刷新實(shí)例(iOS和Android通用),具有一定的參考價(jià)值,有興趣的可以了解一下

在web應(yīng)用中,上拉刷新加載更多,下拉刷新列表的操作非常常見,那么在React-Native中是如何實(shí)現(xiàn)呢,我們具體來看一下
ReactNative提供了RefreshControl下拉刷新組件,但是沒有提供上拉刷新組件,上拉刷新在App中是很常用的。

今天我們來實(shí)現(xiàn)一個(gè)iOS和Android通用的上拉刷新功能。

下面簡(jiǎn)要介紹下我實(shí)現(xiàn)的思路。

思路:

1、常量定義:

const moreText = "加載完畢"; //foot顯示的文案 
//頁碼 
var pageNum = 1; 
//每頁顯示數(shù)據(jù)的條數(shù) 
const pageSize = 10; 
//頁面總數(shù)據(jù)數(shù) 
var pageCount = 0; 
//頁面List總數(shù)據(jù) 
var totalList = new Array(); 
 
//foot: 0 隱藏 1 已加載完成 2 顯示加載中 

2、定義ListView

<ListView 
 enableEmptySections={true} 
 dataSource={this.state.dataSource} 
 renderRow={this._renderRow.bind(this)} 
 renderFooter={this._renderFooter.bind(this)} 
 onEndReached={this._endReached.bind(this)} 
 onEndReachedThreshold={0} 
/> 

3、聲明State狀態(tài)機(jī)變量

ListView.DataSource實(shí)例(列表依賴的數(shù)據(jù)源)

constructor(props) { 
 super(props); 
 this.state = { 
  dataSource: new ListView.DataSource({ 
   rowHasChanged: (r1, r2) => r1 !== r2, 
  }), 
  loaded: false,//控制Request請(qǐng)求是否加載完畢 
  foot:0,// 控制foot, 0:隱藏foot 1:已加載完成 2 :顯示加載中 
  error:false, 

這里我們主要聲明了dataSource,這個(gè)沒什么說的

  1. loaded:用來控制整個(gè)頁面的菊花
  2. error:如果Request錯(cuò)誤,顯示一個(gè)錯(cuò)誤頁面
  3. foot: 控制Footer的view

4、渲染頁面前,加載數(shù)據(jù)

componentWillMount() { 
 this._fetchListData(); 
} 

5、Load服務(wù)端數(shù)據(jù)

_fetchListData() { 
 if(pageNum > 1){ 
  this.setState({loaded:true}); 
 } 
 fetch(requestURL, { 
  method: 'get', 
  headers: headerObj, 
 }).then(response =>{ 
  if (response.ok) { 
   return response.json(); 
  } else { 
   this.setState({error:true,loaded:true}); 
  } 
 }).then(json=>{ 
  let responseCode = json.code; 
  if (responseCode == 0) { 
   let responseData = json.data; 
 
   pageCount = responseData.count; 
   let list = responseData.data; 
 
   if (orderList == null) { 
    orderList = []; 
    currentCount = 0; 
   } else { 
    currentCount = list.length; 
   } 
   if(currentCount < pageSize){ 
    //當(dāng)當(dāng)前返回的數(shù)據(jù)小于PageSize時(shí),認(rèn)為已加載完畢 
    this.setState({ foot:1,moreText:moreText}); 
   }else{//設(shè)置foot 隱藏Footer 
    this.setState({foot:0}); 
   } 
   for (var i=0; i < list.length; i++) { 
    totalList.push( list[i] ); 
   } 
 
   this.setState({ 
    dataSource: this.state.dataSource.cloneWithRows(totalList), 
    loaded: true, 
   }); 
  }else{ 
   this.setState({error:true,loaded:true}); 
  } 
 }).catch(function (error) { 
  this.setState({error:true,loaded:true}); 
 }); 
} 

這里的細(xì)節(jié)挺多的:

1、當(dāng)pageNum > 1時(shí),就不要整個(gè)頁面的菊花,此時(shí)loaded一直為true,這個(gè)主要是為了頁面效果,要不然沒加載一頁數(shù)據(jù),這個(gè)屏幕就會(huì)閃一下。

2、比較當(dāng)前返回的list的大小,是否小于pageSize,控制Footer是否隱藏,還是顯示已加載完畢

3、聲明了一個(gè)全局的totalList對(duì)象,每次有新數(shù)據(jù)的時(shí)候,都push進(jìn)去。

如果不采用push的方式的話,直接采用setState方法的話,第二頁會(huì)把第一頁的數(shù)據(jù)覆蓋掉。

6、定義renderRow方法

renderRow={this._renderRow.bind(this)}   列表組件渲染函數(shù) ,此處頁面邏輯省略。

7、定義renderFooter方法

renderFooter   頁腳會(huì)在每次渲染過程中都重新渲染。

_renderFooter() { 
 if(this.state.foot === 1){//加載完畢 
  return ( 
  <View style={{height:40,alignItems:'center',justifyContent:'flex-start',}}> 
   <Text style={{color:'#999999',fontSize:12,marginTop:10}}> 
    {this.state.moreText} 
   </Text> 
  </View>); 
 }else if(this.state.foot === 2) {//加載中 
  return ( 
  <View style={{height:40,alignItems:'center',justifyContent:'center',}}> 
   <Image source={{uri:loadgif}} style={{width:20,height:20}}/> 
  </View>); 
 } 
} 

根據(jù)狀態(tài)機(jī)變量foot控制Footer的顯示

8、onEndReached 定義

onEndReachedThreshold={0}

當(dāng)所有的數(shù)據(jù)都已經(jīng)渲染過,并且列表被滾動(dòng)到距離最底部不足onEndReachedThreshold個(gè)像素的距離時(shí)調(diào)用。原生的滾動(dòng)事件會(huì)被作為參數(shù)傳遞。譯注:當(dāng)?shù)谝淮武秩緯r(shí),如果數(shù)據(jù)不足一屏(比如初始值是空的),這個(gè)事件也會(huì)被觸發(fā)

_endReached(){ 
 if(this.state.foot != 0 ){ 
 return ; 
 } 
 this.setState({ 
 foot:2, 
 }); 
 this.timer = setTimeout( 
 () => { 
  pageNum ++; 
  this._fetchListData(); 
 },500); 
} 

這里需要注意一下幾點(diǎn)

1、第一屏的時(shí)候可能也會(huì)觸發(fā)_endReached方法,所以需要判斷foot為非 0(即加載中和已加載完畢)時(shí),直接return

2、上拉時(shí),觸發(fā)_endReached方法,可能server端接口響應(yīng)很快,幾乎看不到菊花效果,特地加了個(gè)500毫秒的等待

9、卸載Timer

componentWillUnmount() { 
// 如果存在this.timer,則使用clearTimeout清空。 
// 如果你使用多個(gè)timer,那么用多個(gè)變量,或者用個(gè)數(shù)組來保存引用,然后逐個(gè)clear 
 this.timer && clearTimeout(this.timer); 
} 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React進(jìn)階學(xué)習(xí)之組件的解耦之道

    React進(jìn)階學(xué)習(xí)之組件的解耦之道

    這篇文章主要給大家介紹了關(guān)于React進(jìn)階之組件的解耦之道,文中通過詳細(xì)的示例代碼給大家介紹了組件分割與解耦的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • React?中使用?Redux?的?4?種寫法小結(jié)

    React?中使用?Redux?的?4?種寫法小結(jié)

    這篇文章主要介紹了在?React?中使用?Redux?的?4?種寫法,Redux 一般來說并不是必須的,只有在項(xiàng)目比較復(fù)雜的時(shí)候,比如多個(gè)分散在不同地方的組件使用同一個(gè)狀態(tài),本文就React使用?Redux的相關(guān)知識(shí)給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-06-06
  • React路由跳轉(zhuǎn)的實(shí)現(xiàn)示例

    React路由跳轉(zhuǎn)的實(shí)現(xiàn)示例

    在React中,可以使用多種方法進(jìn)行路由跳轉(zhuǎn),本文主要介紹了React路由跳轉(zhuǎn)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • React中使用Workbox進(jìn)行預(yù)緩存的實(shí)現(xiàn)代碼

    React中使用Workbox進(jìn)行預(yù)緩存的實(shí)現(xiàn)代碼

    Workbox是Google Chrome團(tuán)隊(duì)推出的一套 PWA 的解決方案,這套解決方案當(dāng)中包含了核心庫(kù)和構(gòu)建工具,因此我們可以利用Workbox實(shí)現(xiàn)Service Worker的快速開發(fā),本文小編給大家介紹了React中使用Workbox進(jìn)行預(yù)緩存的實(shí)現(xiàn),需要的朋友可以參考下
    2023-11-11
  • React翻頁器的實(shí)現(xiàn)(包含前后端)

    React翻頁器的實(shí)現(xiàn)(包含前后端)

    本文主要介紹了React翻頁器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • react之組件通信詳解

    react之組件通信詳解

    本篇文章主要介紹了React組件通信詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-10-10
  • 深入理解React 三大核心屬性

    深入理解React 三大核心屬性

    本文主要介紹了React 三大核心屬性,主要包括State屬性,Props屬性,Refs屬性,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • React如何自定義輪播圖Carousel組件

    React如何自定義輪播圖Carousel組件

    這篇文章主要介紹了React如何自定義輪播圖Carousel組件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • ReactNative頁面跳轉(zhuǎn)實(shí)例代碼

    ReactNative頁面跳轉(zhuǎn)實(shí)例代碼

    這篇文章主要介紹了ReactNative頁面跳轉(zhuǎn)的代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • React路由參數(shù)傳遞與嵌套路由的實(shí)現(xiàn)詳細(xì)講解

    React路由參數(shù)傳遞與嵌套路由的實(shí)現(xiàn)詳細(xì)講解

    這篇文章主要介紹了React路由參數(shù)傳遞與嵌套路由的實(shí)現(xiàn),嵌套路由原則是可以無限嵌套,但是必須要讓使用二級(jí)路由的一級(jí)路由匹配到,否則不顯示,需要的朋友可以參考一下
    2022-09-09

最新評(píng)論