React Router: как правильно добавить маршрут / URL-адрес, ничего не заменяя?

Как мне добавить маршрут с помощью реактивного маршрутизатора?

Допустим, текущий маршрут /page1/page2, и я хочу проложить маршрут до /page1/page2/next-page

сначала я получаю маршрутизатор

const router = useHistory();

Когда я использую push вот так

router.push("next-page");

Он направляется к /page1/next-page.

Когда я использую, добавляю / вот так

router.push("/next-page");

Он направляется к /next-page

Я также пробовал что-то вроде этого

router.push(`${router.location.pathname}/next-page`)

Но проблема в том, что когда я сейчас нахожусь в /page1/page2/, я оказываюсь в /page1/page2//next-page с двумя //.

Есть ли хороший способ решить эту проблему без необходимости писать полный маршрут, например router.push("/page1/page2/next-page")?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
6
0
2 168
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если вы сделаете router.push("/page1/page2/next-page"), это должно сработать. Думаю нужно указывать полный путь, не вижу в этом ничего плохого

Это именно то, чего я не хочу делать. Я не хочу указывать полный путь, потому что в некоторых ситуациях я не знаю полного пути, я просто хочу добавить что-то к существующему пути

Jonas 10.12.2020 22:36

если вы хотите добавить что-то к существующему пути, вы сможете сделать что-то вроде

const location = useLocation()
const currentPath = location.pathname // to get current route
router.push(`${currentPath}/next-page`)

Это sudo-код, поэтому вам может потребоваться немного изменить его для правильного синтаксиса.

Ответ принят как подходящий

В итоге я определил функцию, которая удаляет / из URL-адреса, если есть

export const removeSlashSuffix = (input)  => {
    if (input.charAt(input.length - 1) === "/") {
        return input.substr(0, input.length - 1)
    } else {
        return input;
    }
}

а затем маршрут, как это

router.push(`${removeSlashSuffix(router.location.pathname)}/nest-page`)

Таким образом, у меня не возникает проблем с маршрутами, которые разрешаются в URL-адресе с // в нем.

Это несколько хакерское решение, и я бы хотел, чтобы react-router-dom поддерживал его из коробки, но, похоже, это не так.

Другие вопросы по теме