<!–

(adsbygoogle=window.adsbygoogle||[]).push({})

–>

(adsbygoogle=window.adsbygoogle||[]).push({})

<!–
–>

在开发移动端react项目中,遇到了上拉加载更多数据的分页功能,自己封装了一个组件,供大家参考,写的不好还请多多指教!
  

import React, {Component} from \'react\';
import cssModuleHandler from \"../../../utils/cssModuleHandler\";
import styleObject from \'./LoadMore.scss\'; const GSV = cssModuleHandler(styleObject); class LoadMore extends Component {
constructor(props) {
super(props);
} componentDidMount() {
const loadMoreFn = this.props.loadMoreFn; const callback = () => {
if (this.getScrollTop() + this.getWindowHeight() + 100 > this.getScrollHeight()) {
loadMoreFn();
}
} //滚动事件
let timeAction;
window.addEventListener(\'scroll\', () => {
if (this.props.isLoadingMore) {
return;
} if (timeAction) {
clearTimeout(timeAction);
} timeAction = setTimeout(callback, 50);
});
} //滚动条在Y轴上的滚动距离
getScrollTop() {
let scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0;
if (document.body) {
bodyScrollTop = document.body.scrollTop;
}
if (document.documentElement) {
documentScrollTop = document.documentElement.scrollTop;
}
scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop;
return scrollTop;
} //文档的总高度
getScrollHeight() {
let scrollHeight = 0, bodyScrollHeight = 0, documentScrollHeight = 0;
if (document.body) {
bodyScrollHeight = document.body.scrollHeight;
}
if (document.documentElement) {
documentScrollHeight = document.documentElement.scrollHeight;
}
scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight;
return scrollHeight;
} //浏览器视口的高度
getWindowHeight() {
let windowHeight = 0;
if (document.compatMode == \"CSS1Compat\") {
windowHeight = document.documentElement.clientHeight;
} else {
windowHeight = document.body.clientHeight;
}
return windowHeight;
} render() {
return (
<React.Fragment>
{this.props.isLoadingMore
? <div className={GSV(\'loadMore\')} ref=\'wrapper\'><img
src={require(\'../../../static/img/common/ic/spinner.png\')} alt=\"\"/></div>
: \'\'}
</React.Fragment>
)
}
} export default LoadMore;

 在需要分页的组件中引入LoadMore组件:

import React, {Component} from \'reactimport {observer, inject} from \"mobx-react\";import {InputItem} from \'antd-mobile\';

import LoadMore from \"../../../../../components/Commoncomponent/LoadMore/LoadMore\";
import PrizeList from \"./view/PrizeList/PrizeList\";
import cssModuleHandler from \"../../../utils/cssModuleHandler\";
import styleObject from \'./index.scss\'; const GSV = cssModuleHandler(styleObject); @inject(\"commonAction\", \"commonStore\", \"giftCouponStore\", \"giftCouponAction\")
@observer
class GiftCoupon extends Component {
constructor(props) {
super(props); this.pageNo = 0;
this.itemPerPage = 200;
} componentDidMount() {
//初始化数据
this.loadMoreFn();
} //加载更多
loadMoreFn = () => {
this.pageNo++; this.props.giftCouponAction.queryBonusListPage({
pageNo: this.pageNo,
itemPerPage: this.itemPerPage
});
} render() {
const {giftCouponList, isLoadingMore} = this.props.giftCouponStore; return (
<div className={GSV(\'otherGiftCouponWrapper\')}>
{
giftCouponList.length > 0 &&
{/*礼券列表*/}
<PrizeList giftCouponAction={this.props.giftCouponAction}
data={giftCouponList}
loadMoreFn={this.loadMoreFn}
isLoadingMore={isLoadingMore}
/> }
          {/*加载更多*/}
          <LoadMore loadMoreFn={loadMoreFn} isLoadingMore={isLoadingMore}/> </div>
)
}
} export default GiftCoupon;

  

<!–

(adsbygoogle=window.adsbygoogle||[]).push({})

–>
<!–

–>

(adsbygoogle=window.adsbygoogle||[]).push({})
ICP+EDI电信增值业务许可证申请审核网站源码

扫码联系技术微信【备注:站媒体网】
客服QQ:137483024