Я хочу исходный URL-адрес без параметров маршрутизатора.
// routers
<Route
exact
path = {`/users/userDetail/:userId`}
component = {UserDetail}
/>
i want to get string "/users/userDetail" from some components
Помоги мне!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если я правильно понимаю, вы хотите извлечь путь текущего маршрута, исключив при этом последнюю userId часть URL-адреса — если это так, вы можете сделать следующее:
const getCurrentPathWithoutLastPart = () => {
return location.pathname.slice(0, location.pathname.lastIndexOf('/'))
}
Если ваш текущий URL-адрес похож на /users/userDetail/some_value, вызов функции даст /users/userDetail:
getCurrentPathWithoutLastPart() // returns /users/userDetail
Существующее решение полезно, но работает не во всех сценариях. Например, мы не можем использовать его для имени родительского пути, так как он вернет пустую строку.
Добавление к существующему решению:
const getCurrentPathWithoutLastPart = () => {
const pathRgx = ///g;
const childroutecount = ((location.pathname || '').match(pathRgx) || []).length
return childroutecount > 1 ? location.pathname.slice(0, location.pathname.lastIndexOf('/')) : location.pathname;
}
Вы можете исключить все параметры из текущего имени пути, используя этот хук:
import { useLocation, useParams } from 'react-router-dom';
export const useBasePath = () => {
const location = useLocation();
const params = useParams<Record<string, string>>();
return Object.values(params).reduce(
(path, param) => path.replace('/' + param, ''),
location.pathname,
);
};
Используйте это так в своем компоненте:
const basePath = useBasePath();
console.info(basePath);