Задать вопрос
@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..
Всем спасибо!
  • Вопрос задан
  • 1175 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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)


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

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽