14

我正在使用反应路由器 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当菜单的渲染函数被调用时是 null 吗?

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

4

4 回答 4

10

在活动导航元素上设置类

import { NavLink } from 'react-router-dom';

&

<NavLink to="/Home" activeClassName="active">Home</NavLink>
于 2019-02-21T14:07:54.537 回答
4

您将需要使用 React Router 的<NavLink>组件,该组件允许您在链接处于活动状态时定义样式或添加类。只需将activeClassNameoractiveStyle属性设置为您的<NavLink>组件。

这是内置在 React Router 中的,有关更多详细信息,请参阅官方文档:https ://reacttraining.com/react-router/web/api/NavLink

于 2018-01-14T12:55:13.590 回答
4

看起来您没有将道具传递给正确的元素。childrenof将是正在渲染的App任何子路由(因此Homeor 或Triangles),但您希望将道具传递给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>
    );
  }
};
于 2015-12-22T08:09:41.230 回答
1

对我来说,有效的方法是使用NavLink它,因为它具有这个活动的类属性。

  1. 首先导入它

    import { NavLink } from 'react-router-dom';
    
  2. 使用 anactiveClassName获取活动类属性。

    <NavLink to="/" activeClassName="active">
         Home
    </NavLink>
    
    <NavLink to="/store" activeClassName="active">
         Store
    </NavLink>
    
    <NavLink to="/about" activeClassName="active">
         About Us
    </NavLink>
    
  3. 通过属性在 css 中为您的课程设置样式active

    .active{
        color:#fcfcfc;
     }
    
于 2020-11-17T10:18:05.727 回答