2 回答
TA贡献1841条经验 获得超3个赞
在重定向到详细页面并将其存储在状态之前使用它。
let position = document.documentElement.scrollTop
这将给出您在页面上的当前位置。一旦你回到列表视图使用
window.scrollTo(0, position)
回到你最初所在的地方。
TA贡献1856条经验 获得超5个赞
您的元素位置可能只有一个真实来源。作为示例,我将位置状态放在 Router 组件上,因为这似乎是 App 组件和 Details 的父级。
const Router = () => {
const [previousClickedItemPos, setPreviousClickedItemPos] = useState(0);
/* import useLocation so that useEffect can be invoked on-route-change */
const location = useLocation();
/* basically pass this to the list items so you can update position on-click */
function handleClickList(element) {
setPreviousClickedItemPos(element);
}
useEffect(() => {
/* scroll to the element previously selected */
window.scrollTo(0, previousClickedItemPos);
}, [previousClickedItemPos, location]);
...
在您的 InfiniteList 组件上:
<ListItem
onClick={e => {
dispatch({
type: "set",
payload: items
});
handleClickList(e.target.offsetTop); /* update position state */
goDetailScreen(item);
}}
key={item.key}
>
{item.value}
</ListItem>
代码沙盒: https ://codesandbox.io/s/modern-breeze-nwtln ?file=/src/router.js
添加回答
举报