我正在使用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')
);
我的应用程序组件看起来像这样,我想我可以在道具中传递位置:
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
为空?
如何将道具传递给子组件?
答案 0 :(得分:4)
看起来你并没有将道具传递给正确的元素。 children
的{{1}}将是呈现的任何子路由(因此App
或Home
),但您希望将道具传递给Triangles
要做到这一点,只需通过JSX传递它:
Menu
答案 1 :(得分:2)
您将需要使用React Router的<NavLink>
组件,该组件允许您在链接处于活动状态时定义样式或添加类。只需将activeClassName
或activeStyle
属性设置为<NavLink>
组件即可。
这内置于React Router中,有关详细信息,请参阅官方文档:https://reacttraining.com/react-router/web/api/NavLink
答案 2 :(得分:1)
要在活动导航元素上设置类
import { NavLink } from 'react-router-dom';
&
<NavLink to="/Home" activeClassName="active">Home</NavLink>
答案 3 :(得分:0)
对我来说,有效的方法是使用NavLink
,因为它具有此活动的类属性。
首先导入
import { NavLink } from 'react-router-dom';
使用activeClassName
获取活动的类属性。
<NavLink to="/" activeClassName="active">
Home
</NavLink>
<NavLink to="/store" activeClassName="active">
Store
</NavLink>
<NavLink to="/about" activeClassName="active">
About Us
</NavLink>
通过属性active
在CSS中设置类的样式。
.active{
color:#fcfcfc;
}