javascript - 从底部 ReactJS 的滚动开始
问题描述
我有 2 个组件(父母和孩子)。子组件在可滚动的 div 中有一长串来自服务器的消息。我只是想从底部的滚动开始页面 - 就像正常的聊天一样。我不想看到它滚动到底部。我可以用 javascript 或 CSS 做到这一点吗?
这是我想要的一个例子。注意:不使用 FlatLists。 https://codesandbox.io/s/react-native-h32if?file=/src/App.js
提前致谢。
class ParentComponent extends Component{
render(){
return(
<div>
<ChildComponent key={uniqueKey()} stream_uid={this.props.match.params.stream_uid} />
</div>
)
}
}
class ChildComponent extends Component{
constructor() {
this.state = {
chat_messages: []
}
}
componentDidMount () {
this.props.dispatch(getStream(this.props.stream_uid,1,this.props.history));
if(this.props.stream) {
this.setState({
chat_messages: this.props.stream.stream.messages
})
}
}
render(){
return(
<div>
{Array.isArray(this.state.chat_messages) && this.state.chat_messages.map(message => {
return (
<div>
<div>{message.username}</div>
<div>{message.text}</div>
</div>
)
})}
</div>
)
}
}
解决方案
您可以通过将 div 设置为像这样滚动到底部来做到这一点
import React, { useEffect, useRef } from "react";
import "./styles.css";
export default function App() {
const listRef = useRef();
useEffect(() => {
listRef.current.scrollTo(0, listRef.current.scrollHeight, "auto");
}, []);
return (
<div
style={{ height: "200px", overflowY: "scroll" }}
id="list"
ref={listRef}
>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
<div>Mesages</div>
</div>
);
}
这是一个代码框演示
推荐阅读
- sorting - Elastic Search :: 按日期排序,得分较高的文档
- css - 调整窗口大小时如何避免重叠元素?
- flutter - 如何更改主题更改时浮动操作按钮的颜色?飘飘然
- python - python concurrent.futures未来函数返回值问题
- c# - StoreContext.GetAppAndOptionalStorePackageUpdatesAsync 上的异常
- django - django rest api __init__() 接受 1 个位置参数,但给出了 2 个
- mysql - 一种整理选择查询的方法
- r - 用于创建从 R 中的两个不同数据帧生成的矩阵列表的循环
- .net-core - 在 asp.net core 下接收特定帐户电子邮件的最佳方法
- java - 消费者根据生产者发送的消息触发api