我有下面的react组件,它本质上是一个聊天框
render(){
const messages = this.props.messages;
return(
<div id="project_chat">
<h1>{this.props.project[0].project}</h1>
<div className="chat_room">
<div className="messages" ref="messages">
<Waypoint onEnter={this.activateWayPoint}/>
<ul>
{messages.map((message) => {
return(
<Message key={uuid.v4()} message={message}/>
)
})}
</ul>
</div>
<div className="chat_message_box">
<input type='text' onChange={this.handleChange} value={this.state.message} className="message_box" placeholder="enter message"/>
<button className="submit_message" onClick={this.handleSubmit}>Submit</button>
</div>
</div>
</div>
)
}
我面临的问题是聊天消息框从容器的最顶部位置开始(滚动位置从顶部开始)。我希望滚动位置像普通聊天室一样位于底部。
所以我尝试这样做:
componentDidMount(){
this.refs.messages.scrollTop = this.refs.messages.scrollHeight
}
这在组件安装后触发,即 - 消息框滚动位置最初从顶部开始,并在渲染时强制到底部。
这通常很好,但我正在使用一个名为的库react-waypoint
,它可以帮助我对聊天消息进行分页。每次我在容器顶部时都会触发。
令人不快的结果是,因为消息框最初在装载时从顶部开始,所以航路点也总是在装载时被触发。
我的问题是我是否可以强制消息组件从底部位置开始,而不是从顶部开始并从开始到底部
我试过这样做
componentWillMount(){
this.refs.messages.scrollTop = this.refs.messages.scrollHeight
}
问题是在组件安装之前我无法访问 refs。还有其他方法吗?