美文网首页
React16.x操作dom实现聊天记录框滚动

React16.x操作dom实现聊天记录框滚动

作者: Hugh1029 | 来源:发表于2019-06-14 08:55 被阅读0次

背景:
我用React做了一个聊天记录的窗口,每当来了新消息或者自己回复了消息之后,需要让聊天记录的那个框自己滚动到最底部,显示最新的消息。

思路:当有新消息的时候,就将新消息push到数组中,这个数组是放在store中受到观察的。那么在数组的内容发生变化的时候,组件就会重新渲染,在生命周期的:componentDidUpdate中,然后在这个生命周期中,拿到聊天记录框的dom,进行scroll就OK了。

在旧版本的React中,采用的是

ref='name'
this.refs.name

这样的形式,要知道在新版本中,this.refs.name这样的形式已经不推荐了,我百度搜了一下,都没有看到有人写一点。自己查了一下文档,得到以下结论:
1.在dom元素上设置ref,这里的ref是一个函数了

<div className='chat-content' ref={(chatContainer) => this.chatContainer = chatContainer}>
....省略具体内容
</div>

这样设置后,在生命周期中,就可以通过this,charContainer来获得dom元素了

  1. 生命周期中滚动到最下端
componentDidUpdate() {
    this.chatContainer.scrollTop = this.chatContainer.scrollHeight
  }

就这么几行代码,就实现了自己的需求,最开始还纠结了很久。
记录下来,作为参考。如能帮助到他人,乐意之至。

相关文章

  • React16.x操作dom实现聊天记录框滚动

    背景:我用React做了一个聊天记录的窗口,每当来了新消息或者自己回复了消息之后,需要让聊天记录的那个框自己滚动到...

  • 弹层-滚动条

    要求:弹出框出现,弹出框的内容滚动,但是dom层不随着弹出框的滚动而滚动,在弹层上滚动时整个页面也不滚动

  • 【三十四】操作表单

    用JavaScript操作表单和操作DOM是类似的,因为表单本身也是DOM树。不过表单的输入框、下拉框等可以接收用...

  • dom试卷

    对之前的试卷进行dom操作,实现必要字段提醒以及打分的功能。实现步骤: 给文本框及选项加id 使用 documen...

  • Angularjs选项卡

    用jQuery实现选项卡,通过操作dom节点实现,jQuery多数api方便操作dom。例如next()、sibl...

  • 实现一个简单的 vue 无限加载指令

    vue 中的自定义指令是对底层 dom 进行操作,下面以实现滚动到底部加载数据,实现无限加载来介绍如何自定义一个简...

  • 实现一个简易的虚拟DOM

    虚拟DOM 虚拟DOM用原生的JavaScript模拟实现了DOM结构,.我们通过操作这个虚拟DOM树来实现对页面...

  • 基于C++的实现文字序幕上下滚动效果

    VC++ 6.0实现文字上下滚动效果,类似电影字幕,定位于文字框中的文字滚动,在窗口中实现的文字垂直滚动特效。在代...

  • 弹框出来以后禁止页面滚动

    项目中的一些公告内容,总是通过弹框的形式来实现,当弹框的内容太多,需要滚动提示,但此时我们滚动弹框,整个页面也会跟...

  • App Inventor垂直滚动列表显示框

    App Inventor中的界面想要实现垂直滚动列表,有3个方法:屏幕滚动、垂直滚动布局、列表框高度超出内容。 如...

网友评论

      本文标题:React16.x操作dom实现聊天记录框滚动

      本文链接:https://www.haomeiwen.com/subject/grgyfctx.html