我想在React中的另一个组件<Top />
上方渲染一个组件<Bottom />
。
结构是这样的:
...
[top, setTop] = useState(false);
[bottom, setBottom] = useState(true);
...
return (
<div>
top && (<Top />)
bottom && (<Bottom />)
<button onClick = { () => setTop(true) } />
</div>
)
问题是,当用户看到<Bottom />
并单击呈现<Top />
的按钮时,视口会发生变化,因为对“ <Top />
进行了“即时滚动”。
是否有一种方法可以渲染组件,但保持视口(用户当前所见)静止?
我应该使用CSS还是javascript技巧?
答案 0 :(得分:1)
要保持滚动位置,可以使用useEffect
钩子对元素的引用。这是一个提示:
useEffect(() => {
// keep scroll position of bottom elememnt
let currentPosition = bottomElementRef.scrollTop // first run
if (top) {
// update scroll position when top element is appended
bottomElementRef.scrollTop = currentPosition // second run when top
}
},[top])
希望,这可以帮助您解决问题。
答案 1 :(得分:-1)
尝试一下:
return (
<div>
{top && <Top />}
{bottom && <Bottom />}
<button onClick={() => setTop(true)} />
</div>
);