React router dom 将 active class 设置为 NavLink
React router dom set active class to the NavLink
我正在使用 React-router-dom 进行导航
Routes.js
<Router>
<Switch>
<Route path="/" exact component={HomePage} activeClassName="routeActive"/>
<Route path="/login" exact component={Login} activeClassName="routeActive"/>
<Route path="/category/veg" exact component={Veg} activeClassName="routeActive"/>
<Route path="/category/non-veg" exact component={NonVeg} activeClassName="routeActive"/>
</Switch>
</Router>
然后在我的导航栏组件中我有
<div className="leftNavItems">
<ul className="navItemsUL">
<li className="navItemsLI">
<NavLink to="/" exact className="linkText" activeClassName="routeActive">
Home
</NavLink>
</li>
<li className="navItemsLI">
<NavLink to="/login" exact className="linkText" activeClassName="routeActive">
About us
</NavLink>
</li>
<div className="dropdown">
{console.log(props)}
{props.location}
<span className={` linkText`}>Categories </span>
<i className="fas fa-caret-down downIcon" />
<div className="dropdownContent">
<ul className="dropdownContentUL">
<li className="dropdownContentLI">
<Link to="/category/:veg" className="dropdownLinkText">
Veg
</Link>
</li>
<li className="dropdownContentLI">
<Link to="/category/:non-veg" className="dropdownLinkText">
Non Veg
</Link>
</li>
</ul>
</div>
</div>
</ul>
</div>
如您所见,我已经为 Navlink 使用了“activeClassName”来设置类名,然后在它处于活动状态时更改其颜色,但在某些情况下我有一个标签“类别”,其中有一个下拉菜单包含“veg”和“non-veg”,所以我想要的还需要在用户处于 /category/veg 或 /caegory/:non-veg 时更改“Category”标签的颜色导航栏组件 console.log(props.location) 在这里未定义,因为我想它不是 insise。这里还有其他方式 >
首先,关于console.log(props.location)
变成了undefined
,你确定你用withRouter
包裹了组件?如果它是一个函数组件,你也可以使用钩子 let location = useLocation()
其次,你可以像
一样手动控制class名字
<span className={`${props.location.pathname.split('/').includes('category') ? 'routeActive' : 'linkText' }`}>Categories </span>
我正在使用 React-router-dom 进行导航
Routes.js
<Router>
<Switch>
<Route path="/" exact component={HomePage} activeClassName="routeActive"/>
<Route path="/login" exact component={Login} activeClassName="routeActive"/>
<Route path="/category/veg" exact component={Veg} activeClassName="routeActive"/>
<Route path="/category/non-veg" exact component={NonVeg} activeClassName="routeActive"/>
</Switch>
</Router>
然后在我的导航栏组件中我有
<div className="leftNavItems">
<ul className="navItemsUL">
<li className="navItemsLI">
<NavLink to="/" exact className="linkText" activeClassName="routeActive">
Home
</NavLink>
</li>
<li className="navItemsLI">
<NavLink to="/login" exact className="linkText" activeClassName="routeActive">
About us
</NavLink>
</li>
<div className="dropdown">
{console.log(props)}
{props.location}
<span className={` linkText`}>Categories </span>
<i className="fas fa-caret-down downIcon" />
<div className="dropdownContent">
<ul className="dropdownContentUL">
<li className="dropdownContentLI">
<Link to="/category/:veg" className="dropdownLinkText">
Veg
</Link>
</li>
<li className="dropdownContentLI">
<Link to="/category/:non-veg" className="dropdownLinkText">
Non Veg
</Link>
</li>
</ul>
</div>
</div>
</ul>
</div>
如您所见,我已经为 Navlink 使用了“activeClassName”来设置类名,然后在它处于活动状态时更改其颜色,但在某些情况下我有一个标签“类别”,其中有一个下拉菜单包含“veg”和“non-veg”,所以我想要的还需要在用户处于 /category/veg 或 /caegory/:non-veg 时更改“Category”标签的颜色导航栏组件 console.log(props.location) 在这里未定义,因为我想它不是 insise。这里还有其他方式 >
首先,关于console.log(props.location)
变成了undefined
,你确定你用withRouter
包裹了组件?如果它是一个函数组件,你也可以使用钩子 let location = useLocation()
其次,你可以像
一样手动控制class名字 <span className={`${props.location.pathname.split('/').includes('category') ? 'routeActive' : 'linkText' }`}>Categories </span>