【问题标题】:How to set scrollTop property of ReactDOM node?如何设置 ReactDOM 节点的 scrollTop 属性?
【发布时间】:2017-12-19 17:43:14
【问题描述】:

设置 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 节点的滚动位置吗?

【问题讨论】:

  • 您需要使用 ref 回调语法来定义它们,而不是将 ref 定义为字符串,请检查:stackoverflow.com/questions/38093760/…
  • 我看不出这与手头的问题有什么关系(以及下面发布的解决方案)。

标签: javascript reactjs scroll scrolltop react-dom


【解决方案1】:

解决了问题...如果您有同样的问题,以供将来参考 - 解决方案是将设置滚动顶部的函数放在 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;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2022-10-31
    相关资源
    最近更新 更多