Мой вариант использования — восстановить положение прокрутки <div>
внутри компонента React, когда пользователь возвращается к соответствующему (родительскому) маршруту. Я отслеживаю положение прокрутки <div>
с помощью onScroll
. Моя идея состоит в том, чтобы сохранить положение прокрутки в состоянии истории. Можно вызвать history.replace()
с обновленным объектом состояния в обработчике событий прокрутки, но производительность низкая (я предполагаю, что history.replace()
заставляет компонент повторно отображать).
Я также попытался вызвать history.replace()
в componentWillUnmount()
(сохранив позицию прокрутки как атрибут экземпляра компонента). Однако это слишком поздно, так как history.location
уже был перенесен на новое место.
То же самое верно и для слушателя истории (history.listen()
).
Существуют ли альтернативные подходы к реализации восстановления положения прокрутки?
Из вашего описания видно, что вы, возможно, боретесь с React и их использованием API истории.
Альтернативным решением может быть сохранение только позиции массива в истории, для чего потребуется только одна замена, и управление обновлениями для прокрутки самих значений в массиве, хранящемся, например, в местное хранилище.
Надеюсь, это полезно.