我正在尝试使选定的导航项处于活动状态/我将其显示为活动状态。我检查有关问题,但找不到我的代码有什么问题。
我知道通过使用 NavLink ,我们可以在选择Nav-Item时默认将其激活。
但是现在,我尝试使用 Link ,显示一些路径名错误。
TypeError:无法读取未定义的属性“路径名”
请帮助我了解,我的代码有什么问题。
或是否有其他方法可以显示活动的导航项目?
我尝试了以下代码:
import React from "react";
import { IndexRoute, Link } from "react-router-dom";
class SideNav extends React.Component {
render() {
const { match, location, history } = this.props;
return (
<div className="sidebar-wrapper">
<div className="sidebar-container">
<ul className="sidebar-menu">
<li className={location.pathname === "/" && "active"}>
<Link className="link" to="/">
<i className="fa fa-cubes icon"></i>
Dashboard
</Link>
</li>
<li className={location.pathname === "/analytics" && "active"}>
<Link className="link" to="/analytics">
<i className="fa fa-pie-chart icon"></i>
Analytics
</Link>
</li>
<li className={location.pathname === "/todo" && "active"}>
<Link className="link" to="/todo">
<i className="fa fa-medkit icon"></i>
What to do?
</Link>
</li>
</ul>
</div>
</div>
);
}
}
export default SideNav;
路由完美运行。
我的路由应用程序/组件代码如下:
import React from "react";
import {
BrowserRouter as Router,
Route,
Switch,
Redirect
} from "react-router-dom";
import TopNav from "./components/Navbar/TopNav";
import SideNav from "./components/Navbar/SideNav";
import Dashboard from "./components/Dashboard";
import Analytics from "./components/Analytics";
import ToDo from "./components/ToDo";
class App extends React.Component {
render() {
return (
<Router>
<SideNav />
<TopNav />
<Switch>
<Route exact path="/">
<Dashboard />
</Route>
<Route exact path="/analytics">
<Analytics />
</Route>
<Route exact path="/todo">
<ToDo />
</Route>
<Redirect to="/"></Redirect>
</Switch>
</Router>
);
}
}
export default App;
谢谢!
答案 0 :(得分:0)
位置是历史的属性,因此您需要使用props.history.location而不是props.location 此外,您没有将历史对象传递给道具,它不会自动出现在道具中
答案 1 :(得分:0)
使用withRouter包装您的组件即可。
import { withRouter } from 'react-router-dom'
// your component
export default withRouter(SideNav)
我真的不知道为什么(!),但是在某些情况下,withRouter无法设置活动类,而我最终不得不像这样修改路由:
<Switch>
<Route exact path="/" render={(routeParams)=><Component {...routeParams}/>}/>
</Switch>