当前位置: 首页 > 面试题库 >

使用React Router当前路由在菜单上有条件地设置活动类

汪迪
2023-03-14
问题内容

我正在使用React Router 1.0.2,我的路线如下所示:

ReactDOM.render(
  <Provider store={store}>
    <Router history={history}>
      <Route path="/" component={App}>
        <IndexRoute component={Home}/>
        <Route path="triangles" component={Triangles}/>
      </Route>
    </Router>
  </Provider>,
  document.querySelector('.container')
);

我的App组件如下所示,我认为我可以在道具中传递位置:

import React, {Component} from 'react';

import Menu from './menu';

export default class App extends Component {
  render() {
    return (
      <div>
        <Menu/>
        <div className="jumbotron">
         {this.props.children && React.cloneElement(this.props.children, {
            location: this.props.location
          })}
        </div>
      </div>
    );
  }
};

我想在Menu组件上有条件地设置一个活动类:

import React, {Component} from 'react';

import { pushPath } from 'redux-simple-router';
import { Link } from 'react-router';

    export default class Menu extends Component {
      render() {
        return (
            <nav role="navigation" className="navbar navbar-default">
              <div id="navbarCollapse" className="collapse navbar-collapse">
                <ul className="nav navbar-nav">
                  <li className={this.props.location.pathname === '/' ? 'active' : ''}>
                    <Link to="/">Home</Link>
                  </li>
                </ul>
              </div>
            </nav>
        );
      }
    };

但是,this.props.location当调用菜单的render函数时,null是否为null?

如何将道具传递给子组件?


问题答案:

好像您没有将prop传递到正确的元素中。该childrenApp将是什么子路径被渲染(所以无论是HomeTriangles),但你想要的道具要传递给Menu

为此,只需通过JSX将其传递:

import React, {Component} from 'react';

import Menu from './menu';

export default class App extends Component {
  render() {
    return (
      <div>
        <Menu location={this.props.location} />
        <div className="jumbotron">
          {this.props.children}
        </div>
      </div>
    );
  }
};


 类似资料:
  • 我想突出显示我的导航菜单中的当前链接基于当前活动的URL。 如果我的导航菜单是纯CSS,我已经找到了很多解决方案,但是我的菜单是基于图像的,因此每个链接的活动类都是不同的,这就是我被困住的地方。 谁能给我提点有用的东西吗?我对jQuery很陌生,但发现它非常有用,是我学过的最好的语言之一。 每个标记都有一个预加载的CSS背景图像,每个类都有一个悬停函数。

  • 我在WordPress的主导航中使用类别。为了显示我的类别“home”(开始页),我在index.php中使用以下代码。“家”是第4类。 问题是,当有人访问我的网站时,“主页”没有标记为当前页面。但如果点击“主页”,它会被突出显示为当前页面。 当有人访问我的网站时,我如何将类别主页设置为当前页面?我能在上面的php代码中包含css吗? 在我的css中有以下功能,当你点击主菜单中的链接(类别)时可以

  • 想实现先请求接口然后再生成路由改如何做到?(下面代码试了几次都不行)

  • 我有一个Angular 2应用程序与几个嵌套的子视图。但它将通过几个显示在同一页面上。 null 例如: 假设您有一个包含某些元素的页面: 一个UI部分显示电影列表 当单击电影列表中的项目时,另一部分显示电影详细信息,但显示在同一页上。 单击电影详细信息中的角色名称时显示角色详细信息的另一个部分,也可显示在同一页上。 等.. 因此,我现在所做的是基于window.location获得URL并通过拆

  • Java8/Camel 2.19. x在这里。我有以下路由XML: 所以,很简单: 在愉快路径上,从AMQ上的输入队列中消费,将其反序列化(通过XStream)为Java对象,将其发送到thingProcessor,并将该处理器的结果放在输出队列中 如果发生异常,例如thingProcessor抛出RuntimeException,我们将异常堆栈跟踪记录到应用程序日志中,然后转换原始XML(我们从

  • 我使用下面的代码将活动类添加到菜单项。该网站是99%使用WooCommerce的Ecomm,我使用产品类别作为顶级导航项目。下面的代码适用于几乎所有项目,除非在产品子类别上处于活动状态。 本质上,我希望顶层导航项被标记为活动类,即使选择了子类别。