Как получить подменю рендеринга с использованием текущего маршрута в response-router v4?
Мой код выглядит примерно так: https://www.techiediaries.com/react-router-dom-v4/
<div className="base">
<header>
<p>React Router v4 Browser Example</p>
<nav>
<ul>
<li><Link to='/'>Home</Link></li>
<li><Link to='/about'>About</Link></li>
<li><Link to='/about/one'>AboutOne</Link></li>
<li><Link to='/about/two'>AboutTwo</Link></li>
</ul>
</nav>
</header>
<div className="container">
<Route path="/" exact component={HomePage} />
<Route path="/about" component={AboutPage} />
Я хочу иметь возможность показывать ссылки на AboutOne и AboutTwo, только если пользователь включен about
, about/one
, или же about/two
(т.е. страница и ее подстраницы). К сожалению с <Link
с и <NavLink
Если вы не можете вручную установить активный класс (насколько я могу судить), иначе я бы просто сделал visibility: visible
стиль для этого. Итак, я думаю, у меня есть две проблемы, которые мешают мне выполнить это: во-первых, я не могу установить, когда Link
активен, и, во-вторых, я не знаю, как получить текущий маршрут, чтобы определить, находится ли пользователь на странице или ее подстраницах. Есть идеи?
2 ответа
Вы можете заключить ссылки подменю в оператор if, а затем использовать обратный вызов, чтобы проверить, находитесь ли вы на пути about. Вы можете проверить свой путь в React Router 4, используя this.props.location.pathname
не уверен, что вы используете стиль кодирования реагирования, но это может пойти так
ifOnAboutPath() {
return this.props.location.pathname === 'about' ? true : false;
}
render() {
const showSubmenu = <ul><li><Link to='/about/one'>AboutOne</Link></li>
<li><Link to='/about/two'>AboutTwo</Link></li></ul>;
const subMenu = this.ifOnAboutPath.bind(this) ? showSubmenu : '';
<div className="base">
<header>
<p>React Router v4 Browser Example</p>
<nav>
<ul>
<li><Link to='/'>Home</Link></li>
<li><Link to='/about'>About</Link></li>
subMenu
</ul>
</nav>
</header>
<div className="container">
<Route path="/" exact component={HomePage} />
<Route path="/about" component={AboutPage} />
Похоже, я смотрел на некоторые документы о маршрутизаторах, которые не были обновлены. Вы можете просто isActive
двигательный Итак, для будущих googlers/bingers/duckduckgoers:
<NavLink
to="/v/user"
isActive={(match, location) => {
console.log(match, location);
return location.pathname.startsWith("/v/user");
}}
className="nav-sub-link"
activeClassName="activeThing"
>
Submenu!
</NavLink>
.nav-sub-link:not(.activeThing) {
visibility: hidden;
}
.nav-sub-link {
visibility: visible;
//then some more styles
}