当前位置: 首页 > 知识库问答 >
问题:

反应路由:如何使所选导航项目处于活动状态?

梁建德
2023-03-14

我试图使/显示选定的导航项目为活动。我检查有关问题,但我找不到什么错在我的代码。

我知道通过使用导航链接,我们可以在选择导航项目时默认激活。

但现在,我正在尝试使用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;

谢谢

共有2个答案

谷翰飞
2023-03-14

位置是历史的属性,所以你需要使用props.history.location来代替props.location你也没有把历史对象传递给道具,它不会自动出现在那里

佟翰林
2023-03-14

用路由器包装你的组件应该可以做到这一点。

import { withRouter } from 'react-router-dom'

// your component

export default withRouter(SideNav)

我真的不知道为什么(!),但在某些情况下withRouter无法设置活动类,我最终不得不修改如下路由:

<Switch>
    <Route exact path="/" render={(routeParams)=><Component {...routeParams}/>}/>
</Switch>
 类似资料:
  • 我的代码工作得很好:每次单击导航抽屉中的一个项目时,该项目就会被选中。 当然,我想用一个默认片段(主页)启动应用程序,但导航抽屉没有选中该项目。如何以编程方式选择该项?

  • 问题内容: 我正在一个已实现UI路由器的项目中,当该项目是当前路线时,该项目用于将活动类添加到导航菜单项。但是,当您导航到该视图中的嵌套视图时,父菜单项不再处于活动状态。请参阅以下柱塞: http://plnkr.co/edit/2CoEdS?p=preview 默认情况下(或者如果您单击它),路线1是“活动的”。当您单击“显示列表”时,您将看到Route 1不再处于活动状态。 编辑: 此示例与我

  • 我是android新手。我想实现一个由项目列表组成的导航抽屉,单击它会打开一个新活动。基本上是所有活动的导航抽屉。当我从导航抽屉中选择一个项目时,特定的活动就会打开。导航抽屉代码是通过执行空活动来实现的。我想在所有活动中实现导航抽屉功能,这些活动被视为空活动,这些活动已经有了一些功能,导航抽屉功能也可以工作。请帮帮我。 这是activity_header档案 这是我的主要活动 这是头活动java代

  • 我如何知道我的系统中哪个选项卡处于活动状态 public View oncreate View(LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState)函数??? 以下代码仅适用于拳头导航,但之后在每个选项卡中,它都会显示最后一个布局。 我认为问题出在< code>onCreateView函数中,我无法获取活动选项卡的位置。 我怎

  • 我正在尝试在我的android应用中实现一个选项卡导航,但是我想在每个选项卡中运行一个不同的activity。我一直在读android开发页面,他们坚持使用片段导航活动。根据我的理解,你不能有一个片段类本身,它必须包含在一个activity中。 是否可以为每个选项卡创建一个新的activity,并在onTabSelected()函数中运行该activity,同时从正在运行的activity中的片段

  • 嗨,我不确定这是一个期望的行为还是一个bug。 这是一个空的create react应用程序示例,带有 版本: 反应:^16.13.1, react-dom:^16.13.1, react-router-dom:^5.2.0, 反应脚本:3.4.1 部件: /-对于主部件 /触点-用于触点组件 这里提供小提琴 多次单击“主页”链接会显示一条