<!–
(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({})
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
扫码联系技术微信【备注:站媒体网】
客服QQ:137483024







