У меня есть проблема с React Router useLocation
и как получить текущий путь.
Вот что я делаю:
import {BrowserRouter as Router, Switch, Route, Link} from "react-router-dom";
import {useHistory, useLocation} from 'react-router-dom'
function Home(props) {
const [isHome, setIsHome] = useState(true);
const [isContents, setIsContents] = useState(false);
const [isUserProfile, setIsUserProfile] = useState(false);
let location = useLocation();
let history = useHistory();
console.log(location)
console.log(history)
function getCurrentLocation() {
}
function logout() {
const logger = fetch('/users/logout');
logger.then(logout => {
if (logout.ok) {
props.logout()
} else {
console.log('error', logout);
}
})
}
return (
<Router>
<div className={'container-fluid h-100'}>
<div className={'row'}>
<ul className={"nav nav-tabs"}>
<li className={"nav-item"}>
<Link to={'/home'}>1</Link>
</li>
<li className={"nav-item"}>
<Link to={'/contents'}>2</Link>
</li>
<li className={"nav-item"}>
<Link to={'/user'}>3</Link>
</li>
</ul>
</div>
<Switch>
<Route exact path={'/home'}>1</Route>
<Route path={'/contents'}>2</Route>
<Route path={'/user'}>3</Route>
</Switch>
</div>
</Router>
)
};
export default Home
Я хочу получить currentLocationPathName для того, чтобы применить какой-то собственный стиль. Когда я делаю console.log(location)
, я получаю следующее:
function useLocation() {
if (true) {
!(typeof useContext === "function") ? true ? Object(tiny_invariant__WEBPACK_IMPORTED_MODULE_6__["default"])(false, "You must use React >= 16.8 in order to use useLocation()") : undefined : void 0;
}
return useContext(context).location;
}
Вот снимок экрана для получения дополнительной информации:
сообщение об ошибке
Я хочу лучше понять, как использовать эти крючки.
Спасибо за ваше время.
Редактировать:
Спасибо @ Dance2d ie за его ответ и особенно эта рекомендация:
А также убедитесь, что Home используется под деревом маршрутизатора (например, BrowserRouter) (child, внук и т. д. c)
I не поставил Home
под <Router></Router>
дерево ...
Теперь все работает хорошо, и я могу получить доступ к location.pathname
.