我有一个带有某些方法的Chat
组件,并且它具有一段代码,该代码生成由两个人一个又一个地发送的消息。
render() {
...
<div id="window" className="window">
<div className="messages">
{this._renderMessages()}
</div>
</div>
...
}
该方法仅生成更多的div
,其样式取决于发送消息的人,并且window
的垂直overflow
设置为auto
,但始终位于顶部
.window {
border-radius: 10px;
max-height: 264px;
overflow: auto;
overflow-x: hidden;
}
我试图通过window
元素的ID并将其scrollTop
的0设置为scrollHigh
的值,但是它不起作用。没什么。
const window = document.getElementById("window");
window.scrollTop = window.scrollHeight;
我尝试将上面的代码放在componentWillMount
和componentWillReceiveProps
中,但没有一个起作用。我还尝试在ref
上设置div
并用this.refs.window
访问它,尽管显示了值,但它也没有用。尝试分配值时我怎么了?
答案 0 :(得分:1)
每次更新后(和初始渲染),您都需要运行滚动到底部的代码。这些操作的生命周期方法为componentDidMount
(用于初始渲染的 )和componentDidUpdate
(用于后续更新的 )。
类似
class YourComponent extends ...{
constructor(props){
super(props);
this.window = React.createRef();
}
scrollToBottom(){
const element = this.window.current;
element.scrollTop = element.scrollHeight;
}
componentDidMount(){
this.scrollToBottom()
}
componentDidUpdate(){
this.scrollToBottom();
}
render() {
...
<div id="window" className="window" ref={this.window}>
<div className="messages">
{this._renderMessages()}
</div>
</div>
...
}
}
演示在https://codesandbox.io/s/y3qvv04l7j
请记住,您可能需要在每次更新后滚动到底部之前进行一些检查,例如,如果要允许滚动直到显示新数据等。