如何设置ReactDOM节点的scrollTop属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置ReactDOM节点的scrollTop属性?相关的知识,希望对你有一定的参考价值。

设置React节点的scrollTop属性不起作用。

我正在尝试使用列表导航到页面和从页面导航时恢复列表的滚动位置。

目前我的代码如下:

  componentDidMount() {
    let prevScrollHeight = Number(localStorage.getItem('listHeight'));

    if (prevScrollHeight >= 0) {
      let listNode = ReactDOM.findDOMNode(this.refs.speakersList);
      listNode.scrollTop = prevScrollHeight;
    }
  }

滚动高度已成功存储在本地存储中。什么不起作用:listNode.scrollTop = prevScrollHeight

有谁知道如何设置React节点的滚动位置?

答案

想出了问题......如果您遇到同样的问题,以便将来参考 - 解决方案是将设置scrolltop的功能放在setTimeout中。似乎它与javascript事件循环有关,而setTimeout将函数放在队列的后面。

工作代码:

componentDidMount() {
  setTimeout(this.setScrollTop.bind(this))
}

setScrollTop() {
  let prevScrollHeight = Number(localStorage.getItem('listHeight'));

  if (prevScrollHeight >= 0) {
    let listNode = ReactDOM.findDOMNode(this.refs.speakersList);
    listNode.scrollTop = prevScrollHeight;
  }
}

以上是关于如何设置ReactDOM节点的scrollTop属性?的主要内容,如果未能解决你的问题,请参考以下文章

ReactDOM.createPortal

ReactDOM渲染到多个节点

ReactDOM.render和ReactDOM.createPortal

ReactDOM.render()

第十五篇:ReactDOM.render 是如何串联渲染链路的?(下)

第十五篇:ReactDOM.render 是如何串联渲染链路的?(下)