У вас может быть единственный источник истины для позиции вашего элемента. В качестве примера я помещаю состояние позиции в компонент 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>
CodeSandBox: https://codesandbox.io/s/modern-breeze-nwtln?file= / src / router. js