加载更多功能实现
来源:互联网 发布:淘宝举报假冒品牌 编辑:程序博客网 时间:2024/05/18 04:01
实现点击加载更多按钮,以及上拉加载更多数据
import React from 'react'import PureRenderMixin from 'react-addons-pure-render-mixin'import { getListData } from '../../../fetch/home/home'import ListCompoent from '../../../components/List'import LoadMore from '../../../components/LoadMore'import './style.less'class List extends React.Component { constructor(props, context) { super(props, context); this.shouldComponentUpdate = PureRenderMixin.shouldComponentUpdate.bind(this); this.state = { data: [], hasMore: false, isLoadingMore: false, page: 1 } } render() { return ( <div> <h2 className="home-list-title">猜你喜欢</h2> { this.state.data.length ? <ListCompoent data={this.state.data}/> : <div>{/* 加载中... */}</div> } { this.state.hasMore ? <LoadMore isLoadingMore={this.state.isLoadingMore} loadMoreFn={this.loadMoreData.bind(this)}/> : '' } </div> ) } componentDidMount() { // 获取首页数据 this.loadFirstPageData() } // 获取首页数据 loadFirstPageData() { const cityName = this.props.cityName; const result = getListData(cityName, 0); this.resultHandle(result) } // 加载更多数据 loadMoreData() { // 记录状态 this.setState({ isLoadingMore: true }) const cityName = this.props.cityName const page = this.state.page const result = getListData(cityName, page) this.resultHandle(result) // 增加 page 技术 this.setState({ page: page + 1, isLoadingMore: false }) } // 处理数据 resultHandle(result) { result.then(res => { return res.json() }).then(json => { const hasMore = json.hasMore const data = json.data this.setState({ hasMore: hasMore, // 注意,这里讲最新获取的数据,拼接到原数据之后,使用 concat 函数 data: this.state.data.concat(data) }) }).catch(ex => { if (__DEV__) { console.error('首页”猜你喜欢“获取数据报错, ', ex.message) } }) }}export default List
import React from 'react'import PureRenderMixin from 'react-addons-pure-render-mixin'import './style.less'class LoadMore extends React.Component { constructor(props, context) { super(props, context); this.shouldComponentUpdate = PureRenderMixin.shouldComponentUpdate.bind(this); } render() { return ( <div className="load-more" ref="wrapper"> { this.props.isLoadingMore ? <span>加载中...</span> : <span onClick={this.loadMoreHandle.bind(this)}>加载更多</span> } </div> ) } loadMoreHandle() { // 执行传输过来的 this.props.loadMoreFn(); } componentDidMount() { // 使用滚动时自动加载更多 const loadMoreFn = this.props.loadMoreFn const wrapper = this.refs.wrapper let timeoutId function callback() { const top = wrapper.getBoundingClientRect().top const windowHeight = window.screen.height if (top && top < windowHeight) { // 证明 wrapper 已经被滚动到暴露在页面可视范围之内了 loadMoreFn() } } window.addEventListener('scroll', function () { if (this.props.isLoadingMore) { return } if (timeoutId) { clearTimeout(timeoutId) } timeoutId = setTimeout(callback, 50) }.bind(this), false); }}export default LoadMore
hasMore
控制组件的显示和隐藏isLoadingMore
控制组件是显示“加载中…”(此时点击失效)还是“点击加载更多”loadMoreData
函数会在点击组件时触发,并加载下一页数据page
记录下一页的页码,会在loadMoreData
函数中使用并累加
监控 window 的scroll
方法,然后获取ref="wrapper"
的DOM,利用getBoundingClientRect()
方法获得距离底部的高度,然后看是否触发 loadMore 方法。
阅读全文
0 0
- 加载更多功能实现
- 加载更多功能实现
- UITableView实现加载更多功能
- 加载更多功能的实现
- 实现Twitter自动加载更多功能
- UItableview中实现加载更多功能+++
- java实现页面加载更多功能
- 工作笔记之加载更多功能实现
- RecyclerView实现底部加载更多功能
- js实现加载更多功能实例
- js实现加载更多的功能
- js实现加载更多功能实例
- Recylerview 加载更多功能实现(分页加载)
- Recylerview 加载更多功能实现(分页加载)
- win8 metro 无限滚动加载数据,实现“更多”功能
- UI基础第十四弹:UItableview中实现加载更多功能
- Android实现下拉刷新,滑动加载更多的功能
- SwipeRefreshLayout实现下拉刷新、上拉加载更多功能
- 日志打印工具类
- mysql修改数据类型
- qt的坑:Could not create directory "E:\oysl\QT\Error in " Util.asciify("build-untitle
- iOS 11 中uitablview Header 设置无效
- Vue微型架构:requestBody网络请求的模式与自定义协议的封装
- 加载更多功能实现
- 2017hdu新生赛 1005 整数的Alvin值
- keytool和openssl生成的证书转换
- activity隐式启动和启动其他app
- 调试javascript的技巧
- Java序列化机制和原理
- LeetCode基础--二叉树-判断二叉树是否平衡
- Tensorflow Serving不支持py_func
- Android性能优化之App瘦身攻略