React-Virtualized ScrollSync:如何设置初始scrollTop值?

时间:2016-11-30 00:49:13

标签: react-virtualized

我使用react-virtualized ScrollSync组件来同步几个固定标头的滚动 - 非常类似于example in the docs

我的问题:是否可以向scrollTop(或其子女)提供初始ScrollSync值?我意识到更好的方法是在控制滚动位置的scrollToRow组件上使用Grid - 为了它的价值,我为此目的使用scrollToColumn。但是因为,纵向上,我只渲染一个非常高的单元格,scrollToRow并不能提供所需的保真度。

我确实意识到这是对网格组件的一种稍微混淆的使用,但它作为一个水平的,无限加载的滚动条都可以很好地工作,同时允许我重用现有的组件。如果我可以设置一个初始scrollTop,我就是金色的。

感谢。

1 个答案:

答案 0 :(得分:3)

不幸的是,如果没有一点黑客攻击,目前还不支持。

首先,黑客攻击的原因:使用ScrollSync(主Grid)向同步Grid s向一个方向滚动偏移。这意味着,即使ScrollSync接受默认左/上偏移作为道具,它们也会被主Grid的第一次渲染覆盖。我认为这可能是正确的做法,以避免反应虚拟化内部的丑陋。

但是,如果你想这样做,你可以在这样的应用程序代码中解决它:

class YourComponent extends Component {
  render () {
    // These are arbitrary
    const defaultScrollLeft = 300
    const defaultScrollTop = 500

    return (
      <ScrollSync>
        {({ clientHeight, clientWidth, onScroll, scrollHeight, scrollLeft, scrollTop, scrollWidth }) => {
          if (!this._initialized) {
            scrollLeft = defaultScrollLeft
            scrollTop = defaultScrollTop

            this._initialized = true
          }

          return (
            <div>
              <Grid
                {...otherSyncedGridProps}
                scrollLeft={scrollLeft}
              />
              <Grid
                {...otherMainGridProps}
                onScroll={onScroll}
                scrollLeft={defaultScrollLeft}
                scrollTop={defaultScrollTop}
              />
            </div>
          )
        }}
      </ScrollSync>
    )
  }
}