React-Virtualized ScrollSync:如何设置初始 scrollTop 值?
React-Virtualized ScrollSync: How to set an initial scrollTop value?
我正在使用 react-virtualized ScrollSync
组件来同步一对固定 headers 的滚动 — 与 example in the docs.
非常相似
我的问题:是否可以为 ScrollSync
(或其 children)提供初始 scrollTop
值?我意识到更好的方法是在控制滚动位置的 Grid
组件上使用 scrollToRow
— 对于它的价值,我 am为此目的使用 scrollToColumn
。但是因为在垂直方向上,我只渲染了一个非常高的单元格,scrollToRow
没有提供所需的保真度。
我确实意识到这是对网格组件的一种略微拙劣的使用,但它作为一个水平的、无限加载的滚动条工作得很好,同时允许我 re-use 一个现有的组件。如果我可以设置一个初始 scrollTop
,我会很高兴。
谢谢。
不幸的是,如果没有一点修改,目前不支持此功能。
首先,破解的原因:滚动偏移在 ScrollSync
的一个方向上流动(主 Grid
同步 Grid
s)。这意味着即使 ScrollSync
接受默认的 left/top 偏移量作为道具——它们也会被主要 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>
)
}
}
我正在使用 react-virtualized ScrollSync
组件来同步一对固定 headers 的滚动 — 与 example in the docs.
我的问题:是否可以为 ScrollSync
(或其 children)提供初始 scrollTop
值?我意识到更好的方法是在控制滚动位置的 Grid
组件上使用 scrollToRow
— 对于它的价值,我 am为此目的使用 scrollToColumn
。但是因为在垂直方向上,我只渲染了一个非常高的单元格,scrollToRow
没有提供所需的保真度。
我确实意识到这是对网格组件的一种略微拙劣的使用,但它作为一个水平的、无限加载的滚动条工作得很好,同时允许我 re-use 一个现有的组件。如果我可以设置一个初始 scrollTop
,我会很高兴。
谢谢。
不幸的是,如果没有一点修改,目前不支持此功能。
首先,破解的原因:滚动偏移在 ScrollSync
的一个方向上流动(主 Grid
同步 Grid
s)。这意味着即使 ScrollSync
接受默认的 left/top 偏移量作为道具——它们也会被主要 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>
)
}
}