react class組件+antd-mobile的下拉刷新上拉加載

CheckboxItem不用看,還沒完善,有一些語法重復(fù)判斷需要更改
import React, { Component } from 'react'
import ReactDOM from 'react-dom';
import './index.less'
import NavBar from '@/NavBar/'
import {getAddressList} from '@api/home'
import {ListView,PullToRefresh,Checkbox} from 'antd-mobile'
import { connect} from 'react-redux'
import {AsyncSelectorAddress} from "@redux/action"
const CheckboxItem = Checkbox.CheckboxItem;
class App extends Component {
    constructor(props){
        super();
        const dataSource = new ListView.DataSource({
            rowHasChanged: (row1, row2) => row1 !== row2,
        });
        this.state = {
            dataSource:dataSource.cloneWithRows([]),
            refreshing: true,
            isLoading: true,
            height: document.documentElement.clientHeight,
            pageNum: 1,
            pageSize: 10,
            total: null,
            addressList: []
        }; 
    }
    componentDidMount(){
        const hei = this.state.height - ReactDOM.findDOMNode(this.lv).offsetTop;
        this.setState({
            height: hei,
        });
        this._getAddressList()
    }
    _getAddressList(){
        const {pageNum,pageSize,addressList,dataSource} = this.state
        this.setState({
            refreshing: true,
            isLoading: true,
        })
        getAddressList({pageNum,pageSize,}).then(res => {
            if(res&&res.code===0){
                if(pageNum===1){
                    this.setState({
                        addressList:res.data.list,
                        dataSource: dataSource.cloneWithRows(res.data.list),
                        pageNum: pageNum +1,
                        refreshing: false,
                        isLoading: false,
                        total: res.data.total
                    })
                }else{
                    this.setState({
                        addressList:addressList.concat(res.data.list),
                        total: res.data.total
                    },()=>{
                        this.setState({
                            dataSource: dataSource.cloneWithRows(this.state.addressList),
                            pageNum: pageNum +1,
                            refreshing: false,
                            isLoading: false
                        })
                    })
                }
            }
        })
    }
    onRefresh =()=> {
        this.setState({
            pageNum: 1
        },()=>{
            this._getAddressList()
        })
    }
    onEndReached = ()=>{
        if(this.state.addressList.length === this.state.total){
            this.setState({
                refreshing: false,
                isLoading: false
            })
            return
        }
        this._getAddressList()
    }
    onChange = (e,item)=>{
        e = e || window.event;  
        e.stopPropagation()
        let obj = this.state.addressList.map(v=>{
            if(v.id === item.id){
                v.isDefault = true
                return v
            }else{
                v.isDefault = false
                return v
            }
        })
        this.setState({
            addressList: obj
        })
    }
    addressClick = (e,item)=>{
        // let nodeText = document.getElementsByTagName('body')
        // nodeText[0].style.backgroundColor = 'red'
        this.props.dispatchAddress(item)
        this.props.history.goBack()
    }
    row =(item)=> {
        return (
            <div key={item.id} className="address-item" onClick={(e)=>this.addressClick(e,item)}>
                <CheckboxItem checked={item.isDefault} onClick={(e) => this.onChange(e,item)}></CheckboxItem>
                <div className="add-cont">
                    <p>{item.phone} {item.isDefault ? <span className="mr">默認(rèn)</span> : '' } </p>
                    <p>{item.provinceName}{item.cityName}{item.districtName}{item.streetName}{item.address}</p>
                </div>
                {/* <span className="btn">編輯</span> */}
            </div>
        )
    }
     // 渲染行數(shù)據(jù)之間的間隔DOM
     renderSeparator = (sectionId, rowId) => {
        return (
            <div
                key={rowId}
                style={{
                    backgroundColor: '#F5F5F9',
                    borderBottom: '1px solid #ECECED',
                }}
            />
        );
    }
    
    render() {
        return (
            <div>
                <NavBar {...this.props} title="請選擇地扯"/>
                <div style={{minHeight:'100vh'}}>
                    <ListView
                        ref={el => this.lv = el}
                        dataSource={this.state.dataSource}
                        renderFooter={() => ( <div style={{ padding: 10, textAlign: 'center' }}>
                        {this.state.isLoading ? '加載中...' : this.state.addressList.length >10 ? '我是有底線的~' : null}
                        </div>)}
                         useBodyScroll
                        renderRow={(item)=>this.row(item)}
                        renderSeparator={(sectionId, rowId) => this.renderSeparator(sectionId, rowId)}
                        style={{
                            height: this.state.height,
                            margin: '5px 0',
                            overflow: 'auto',
                            minHeight: '100'
                        }}
                        pullToRefresh={<PullToRefresh
                            refreshing={this.state.refreshing}
                            onRefresh={this.onRefresh}  //下拉刷新
                        />}
                        onEndReachedThreshold={10}
                        onEndReached={this.onEndReached} //上拉加載
                        pageSize={10}
                    />
                </div>
            </div>
        )
    }
}

export default connect(null,dispatch=>({
    dispatchAddress(data){
        dispatch(AsyncSelectorAddress(data))
    }
}))(App)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卦羡,一起剝皮案震驚了整個濱河市谭梗,隨后出現(xiàn)的幾起案子囤耳,更是在濱河造成了極大的恐慌在刺,老刑警劉巖恐锦,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件融击,死亡現(xiàn)場離奇詭異次乓,居然都是意外死亡吓歇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門票腰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來城看,“玉大人,你說我怎么就攤上這事杏慰〔饽” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵缘滥,是天一觀的道長轰胁。 經(jīng)常有香客問我,道長朝扼,這世上最難降的妖魔是什么赃阀? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮擎颖,結(jié)果婚禮上榛斯,老公的妹妹穿的比我還像新娘。我一直安慰自己搂捧,他們只是感情好驮俗,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著允跑,像睡著了一般王凑。 火紅的嫁衣襯著肌膚如雪搪柑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天索烹,我揣著相機(jī)與錄音工碾,去河邊找鬼。 笑死术荤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的每篷。 我是一名探鬼主播瓣戚,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼焦读!你這毒婦竟也來了子库?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤矗晃,失蹤者是張志新(化名)和其女友劉穎仑嗅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體张症,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仓技,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了俗他。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脖捻。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兆衅,靈堂內(nèi)的尸體忽然破棺而出地沮,到底是詐尸還是另有隱情,我是刑警寧澤羡亩,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布摩疑,位于F島的核電站,受9級特大地震影響畏铆,放射性物質(zhì)發(fā)生泄漏雷袋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一辞居、第九天 我趴在偏房一處隱蔽的房頂上張望片排。 院中可真熱鬧,春花似錦速侈、人聲如沸率寡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冶共。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捅僵,已是汗流浹背家卖。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留庙楚,地道東北人上荡。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像馒闷,于是被迫代替她去往敵國和親酪捡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351