@hamster141095

Как узнать history.length (stack) в react-router-dom 6?

Добрый день! Подскажите, как реализовать такую функцию на react-router-dom v6 ?
Ведь объект history ушел в 6 версии, и в доке не могу найти ифну, как найти history-stack

export const closeModal = (
  history: H.History<unknown>,
  path: string,
) => {
  // history.length <= 2 ? history.push(`/${path}`) : history.goBack();
};


Понятно, что history заменили на navigate и можно правую часть переписать как navigate(-1), но мне нужно узнать stack history..
Всем спасибо!
  • Вопрос задан
  • 773 просмотра
Пригласить эксперта
Ответы на вопрос 2
Alexandroppolus
@Alexandroppolus
кодир
Да никак не узнать. История ведь относится к вкладке браузера, а не к твоему приложению. Чел мог прогуляться по другим сайтам в этой вкладке, а потом тебя загрузить, тогда история уже будет длинная, ибо она общая.
Мне однажды надо было внутрь хистори залезть, пришлось запилить свою реализацию интерфейса History, подключить её к window.history через события, и воткнуть в Router вместо стандартной BrowserHistory
Ответ написан
Комментировать
Psychosynthesis
@Psychosynthesis
Fullstack developer and radio engineer
В некоторых случаях можно обойтись использованием объекта location.state

Это немного криво, но уж лучше чем ничего. Идея в том, что с помощью этого объекта есть возможность передать информацию, когда вы переходите откуда-либо с помощью navigate:

import { useNavigate } from 'react-router-dom'
...
const navigate = useNavigate()
useEffect(() => {
 navigate('/new-page', {state: { from: 'old-page' }})
}, [])


А уже в нужном месте можно проверить откуда был совершён переход:

import { useLocation } from 'react-router-dom'
...
const { state: locationState } = useLocation() // Естессна, как и всех хуки это всё внутри компонента
console.log(locationState ?.from)


Понимаю что это не всегда подойдёт, но в некоторых случаях может помочь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы