在不更改 React 视口的情况下在顶部渲染 html?

Rendering html on top without changing viewport in React?

我想在 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 技巧?

试试这个:

return (
  <div>
    {top && <Top />}
    {bottom && <Bottom />}
    <button onClick={() => setTop(true)} />
  </div>
);

要保持​​滚动位置,您可以使用 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])

希望,这可以帮助您解决问题。