javascript - 加载新数据时如何停止页面滚动
问题描述
我在反应中有一个类组件来映射 Post 组件。在底部,我有一个从数据库加载更多数据的按钮。我遇到的问题是,当加载新数据时,页面滚动到底部。我想让它坚持用户以前的帖子
我的组件:
import React,{Component} from 'react';
import Ride from '../Components/Ride';
import firebase from 'firebase'
class RideList extends Component{
state={
rides: [{
user:{
photo: '',
name: '',
uid: ''
},
likes: 0,
likers: [],
time: '',
line: [{lng:22.01,lat:41.01}],
when: 0
}],
lastDoc: {}
}
componentDidMount(){
const db = firebase.firestore();
db.collection('posts').orderBy('when','desc').limit(5).get().then(res=>{
const data = []
res.docs.map(doc=>{
data.push({...doc.data(),id: doc.id})
})
this.setState({rides: data, lastDoc: res.docs[res.docs.length-1]})
}).catch(er=>{
console.log(er)
})
}
loadMore = ()=>{
const rides = [...this.state.rides];
const db = firebase.firestore();
db.collection('posts').orderBy('when','desc').startAfter(this.state.lastDoc).limit(5).get().then(res=>{
res.docs.map(doc=>{
rides.push({...doc.data(),id: doc.id})
})
this.setState({rides: rides, lastDoc: res.docs[res.docs.length-1]})
})
}
render(){
return(
<div style={{textAlign:'start'}}>
{this.state.rides.map((el,index)=>{
return(
<div>
<Ride key={el.when} {...el} user={this.props.user}/>
</div>
)
})}
{this.props.uid ? '':<button onClick={()=>this.loadMore()}>Load more</button>}
</div>
)
}
}
export default RideList;
解决方案
您应该查看“React LifeCycle”文档。我认为这篇文章对你有帮助。
https://reactjs.org/docs/react-component.html#getsnapshotbeforeupdate
推荐阅读
- xslt - XSLT 排序节点处理
- python - 将组合框中的选定值打印到文本框中
- twitter - 通过 twitter api 搜索图像
- css - 如何使包裹的边框保持比例以及如何将图像裁剪为相同大小并保持响应能力?CSS,引导程序
- nestjs - 在 Seqelize 中使用“where”选项调用 findOne() 时出现无效值异常
- oracle - 在 Oracle SQL 的功能块中声明数字变量时出错
- excel - 转换为数据库布局、VLookup、Round、Months
- magento - Magento 2 - 使用 GraphQL 单独加载不可见的产品
- jupyter-notebook - 设置 ipython 内核启动的路径(不是 jupyter)
- mysql - 当我在 MYSQL 8.0 中执行 char(97) 时,它显示 0x61。为什么?我想要'a'作为答案