中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react-native-page-listview使用方法

發布時間:2020-06-25 15:24:47 來源:網絡 閱讀:798 作者:geekPrince 欄目:開發技術

react-native-page-listview

對ListView/FlatList的封裝,可以很方便的分頁加載網絡數據,還支持自定義下拉刷新View和上拉加載更多的View.兼容高版本FlatList和低版本ListVIew.組件會根據你使用的react-native的版本自動選擇(高版本使用FlatList,低版本使用ListView)

github地址: https://github.com/geek-prince/react-native-page-listview

npm地址: https://www.npmjs.com/package/react-native-page-listview

#1.0.3->1.1.0改動/新增:

    1.增加手動處理數組數據方法,
    2.父組件重新加載數據后手動刷新數據
    3.從網絡獲取數據,數據為空時的渲染界面,
    4.解決部分手機上界面為空,不顯示的問題,(鑒于自定義組件寬高實用性并不大,而且部分手機顯示有問題,去除自定義組件寬高,改為自適應)
    5.對放在scrollView中的支持(放在ScrollView中時則不能上拉刷新,下拉加載更多)
    6.加入可選屬性allLen,對于分頁顯示時可以指定數據的總條數

安裝

npm install react-native-page-listview --save

如何使用

下面說明中的'組件'指的就是當前這個'react-native-page-listview'組件.

首先導入組件

import PageListView from 'react-native-page-listview';

1.不分頁,不從網絡獲取數據(用于本地數組數據的展示)

這時你只需要給組件傳遞一個數組

let arr=[你要在ListView上展示的數據數組]

在render方法中使用該組件

<PageListView 
    renderRow={this.renderRow} 
    refresh={this.refresh} 
/>

renderRow方法中需要你指定每一行數據的展示View,與ListView/FlatListrenderRow/renderItem方法相同

renderRow=(rowData,index)=>{
    return(<View>你的View展示</View>);
}

refresh方法中指定需要展示數據的數組

refresh=(callBack)=>{
    callBack(arr);
}

2.不分頁,從網絡獲取數據(用于網絡數組數據不多,后端接口沒有用分頁時)

這時與上面使用方法一致,只需要更改一下refresh方法

refresh=(callBack)=>{
    fetch(url)
        .then((response)=>response.json())
        .then((responseData)=>{
            //根據接口返回結果得到數據數組
            let arr=responseData.result;
            callBack(arr);
        });
}

以上這兩種方式渲染結果如下(沒有下拉刷新和上拉更多):

react-native-page-listview使用方法

github上加載不出來或顯示有問題,請點擊這里: http://github.jikeclub.com/pageListView/s1.gif

3.從網絡獲取數據并分頁,不自定義上拉刷新,下拉加載更多View(用于數據較多,需要分頁請求數據時)

這時你需要給組件一下幾個屬性pageLen,renderRow,refresh,loadMore.

<PageListView 
    pageLen={15} 
    renderRow={this.renderRow} 
    refresh={this.refresh} 
    loadMore={this.loadMore} 
/>

pageLen指定你每次調用后端分頁接口可以獲得多少條數據.
renderRow使用方法和上面相同,渲染每一行的展示.
refresh方法會在你組件一開始加載和你下拉刷新時調用,所以你在這個方法中需要將你從后端分頁接口的第一頁請求返回的數據通過回調傳給組件.

refresh=(callBack)=>{
    fetch(分頁接口url+'?page=1')
        .then((response)=>response.json())
        .then((responseData)=>{
            //根據接口返回結果得到數據數組
            let arr=responseData.result;
            callBack(arr);
        });
}

loadMore方法會在你下拉加載更多時調用,這時除了callBack還會傳給你另一個參數page表示即將要加載的分頁數據是第幾頁,這時你只需要根據page把相應第幾頁的數組數據通過回調傳給組件就行.

loadMore=(page,callback)=>{
    fetch(分頁接口url+'?page='+page)
        .then((response)=>response.json())
        .then((responseData)=>{
            //根據接口返回結果得到數據數組
            let arr=responseData.result;
            callBack(arr);
        });
};

這種情況下顯示的渲染效果為:

react-native-page-listview使用方法

github上加載不出來或顯示有問題,請點擊這里: http://github.jikeclub.com/pageListView/s2.gif

4.從網絡獲取數據并分頁,并且自定義下拉刷新,上拉加載更多View

渲染下拉刷新View使用renderRefreshView,且此時需要給定它的高度renderRefreshViewH,渲染加載更多View使用renderLoadMore,渲染沒有更多數據的View使用renderNoMore.

<PageListView 
    pageLen={15} 
    renderRow={this.renderRow} 
    refresh={this.refresh} 
    loadMore={this.loadMore} 
    //上面四個屬性使用方法同上
    renderRefreshView={this.renderRefreshView}
    renderRefreshViewH={150}
    renderLoadMore={this.renderLoadMore}
    renderNoMore={this.renderNoMore}
/>
renderRefreshView=()=>{
        return(
            <View style={{}}>//你對渲染下拉刷新View的代碼</View>
        );
    };
renderLoadMore=()=>{
        return(
            <View style={{}}>//你對渲染加載更多View的代碼</View>
        );
    };
renderNoMore=()=>{
        return(
            <View style={{}}>//你對渲染沒有更多數據時View的代碼</View>
        );
    };

這種情況下顯示的渲染效果為:

react-native-page-listview使用方法

github上加載不出來或顯示有問題,請點擊這里: http://github.jikeclub.com/pageListView/s3.gif

拓展

下拉刷新進階

如果你想實現更好看更絢麗的下拉刷新效果,可以像下面這樣使用renderRefreshView.

pullState會根據你下拉的狀態給你返回相應的字符串:

  • '' : 沒有下拉動作時的狀態
  • 'pulling' : 正在下拉并且還沒有拉到指定位置時的狀態
  • 'pullOk' : 正在下拉并且拉到指定位置時并且沒有松手的狀態
  • 'pullRelease' : 下拉到指定位置后并且松手后的狀態
renderRefreshView=(pullState)=>{
        switch (pullState){
            case 'pullOk':
                return <View style={}>
                    //下拉刷新,下拉到指定的位置時,你渲染的View
                </View>;
                break;
            case 'pullRelease':
                return <View style={}>
                    //下拉刷新,下拉到指定的位置后,并且你松手后,你渲染的View
                </View>;
                break;
            case '':
            case 'pulling':
            default:
                return <View style={}>
                    //下拉刷新,你正在下拉時還沒有拉到指定位置時(或者默認情況下),你渲染的View
                </View>;
                break;
        }
    };

這種情況下顯示的渲染效果為:

react-native-page-listview使用方法

github上加載不出來或顯示有問題,請點擊這里: http://github.jikeclub.com/pageListView/s4.gif

對數據數組進行處理

有時候我們不一定會直接渲染從后端取回來的數據,需要對數據進行一些處理,這時可以在組件中加入dealWithDataArrCallBack屬性來對數組數據進行一些處理.下面是把從后端取回來的數組進行順序的顛倒.

<PageListView 
    //其他的屬性...
    dealWithDataArrCallBack={(arr)=>{return arr.reverse()}}
/>

上面對數組的操作只會在分頁請求數據的"上拉刷新"和"下拉加載更多"時觸發.有的時候我們可能要在某個點擊事件等操作之后對數據數組進行操作,修改.這個時候就可以通過主動調用組件的changeDataArr方法來實現.這時需要先對組件進行ref引用

<PageListView 
    //其他的屬性...
    refs={(r)=>{!this.PL&&(this.PL=r)}}
/>

然后在執行某個操作時需要修改數組數據時通過主動調用changeDataArr方法來實現

this.PL1.changeDataArr((arr)=>{return arr.reverse()});

手動刷新數據

這種情況通常用于組件顯示數據分類中的某一類的情況,然后父組件中更改了篩選的分類,父組件中獲得數組數據需要手動把數據傳給組件,并刷新組件,這個時候可以用到manualRefresh這個方法,這個方法也需要先像上面一樣獲取到組件的ref引用.然后在父組件獲得數據數組res

this.PL.manualRefresh(res);

手動刷新組件

沒有一條數據時的渲染

如果獲取到的數據數組為空,可以通過renderEmpty方法來渲染這種情況下要顯示的View

<PageListView 
    //其他的屬性...
    renderEmpty={this.renderEmpty}
/>
renderEmpty=()=>{return(<View style={[]}>你的View渲染代碼</View>);}

小功能

另外,FlatList中有個屬性為ItemSeparatorComponent是設置每一行View之間分割的View的,自己覺得不錯就寫到組件里了,兼容ListView.

如果需要把組件放到scrollView中時加入inScrollView={true}的屬性,但此時便不能使用上拉刷新,下拉加載更多.

屬性一覽表:

props 作用 默認值
renderRow 處理"渲染FlatList/ListView的每一行"的方法 null
refresh 處理"下拉刷新"或"一開始加載數據"的方法 null
loadMore 處理"加載更多"的方法 null
pageLen 每個分頁的數據數 0
allLen 總的數據條數 0
dealWithDataArrCallBack 如果需要在用當前后端返回的數組數據進行處理的話,傳入回調函數 null
renderLoadMore 還有數據可以從后端取得時候渲染底部View的方法 null
renderNoMore 沒有數據(數據已經從后端全部加載完)是渲染底部View的方法 null
renderRefreshView 渲染下拉刷新的View樣式 null
renderRefreshViewH 渲染下拉刷新的View樣式的高度 60
renderEmpty 如果網絡獲取數據為空時的渲染界面 null
ItemSeparatorComponent 渲染每行View之間的分割線View null
inScrollView 當前組件是否是放在scrollView中(放在ScrollView中時則不能上拉刷新,下拉加載更多) false
FlatList/ListView自身的屬性 是基于FlatList/ListView,所以可以直接使用他們自身的屬性

注意:如果屏幕下方有絕對定位的View時,這時組件自適應寬高,下面的一部分內容會被遮擋,這時一個很好的解決方法是在組件下方渲染一個與絕對定位等高的透明View來解決(&lt;View style={{height:你絕對定位View的高度,backgroundColor:'#0000'}}/&gt;).

如果大家覺得我的組件好用的話,幫到你的話,歡迎大家Star,Fork,如果有什么問題的話也可以在github中想我提出,謝謝大家的支持.

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武胜县| 丹东市| 岳普湖县| 政和县| 合江县| 浦北县| 樟树市| 皮山县| 六枝特区| 汪清县| 甘谷县| 宜丰县| 宣武区| 德州市| 榕江县| 滦南县| 通州市| 罗甸县| 永善县| 留坝县| 睢宁县| 庆安县| 桐城市| 巩义市| 响水县| 于都县| 泰兴市| 隆化县| 丹东市| 伽师县| 京山县| 上蔡县| 休宁县| 离岛区| 苍梧县| 上杭县| 同德县| 泌阳县| 恭城| 双辽市| 台南县|