我使用创建一个bootstrap风格的侧边栏Link
.这是我的代码片段:
- MAIN NAVIGATION
- Dashboard
- Email Lists
- Buy Verifications
```
我想active
在包装元素上设置活动路径的类.我看到有其他的解决方案,在那里,展示了如何做到这一点kindof(使用反应路由器当前的路线有条件地设置活动类菜单上),但我不认为这是设置在一个包装的主动类的最佳方式
Link
.
我还发现了https://github.com/insin/react-router-active-component,但感觉它应该是不必要的.
在React Router中,这是可能的,还是需要使用外部解决方案?
在链接组件上,您现在可以添加activeClassName或设置activeStyle.
这些允许您轻松地将样式添加到当前活动的链接.
以前,您可以创建一个自定义组件,其作用类似于使用以下逻辑链接的包装器.
在名为nav_link.js的文件中
import React from 'react';
import { Link } from 'react-router-dom';
import PropTypes from 'prop-types';
class NavLink extends React.Component {
render() {
var isActive = this.context.router.route.location.pathname === this.props.to;
var className = isActive ? 'active' : '';
return(
{this.props.children}
);
}
}
NavLink.contextTypes = {
router: PropTypes.object
};
export default NavLink;
并在组件中使用如下所示:
...
import NavLink from "./nav_link";
.....
React-Router V4带有一个开箱即用的NavLink组件
要使用,只需将activeClassName
属性设置为您已适当设置样式的类,或直接设置activeStyle
为所需的样式.有关更多详细信息,请参阅文档.
Hello
使用ES6更新答案:
import React, { Component } from 'react';
import { Link } from 'react-router'
class NavLink extends Component {
render() {
let isActive = this.context.router.isActive(this.props.to, true);
let className = isActive ? "active" : "";
return (
);
}
}
NavLink.contextTypes = {
router: React.PropTypes.object
};
export default NavLink;
然后如上所述使用它.
我不喜欢创建自定义组件的想法,因为如果你有一个不同的包装元素,你将不得不创建另一个自定义组件等.此外,它只是矫枉过正.所以我只是用css和activeClassName做到了:
Something
然后只需添加一些CSS:
li.link-wrapper > a.active {
display: block;
width: 100%;
height:100%;
color: white;
background-color: blue;
}
从技术上讲,这不会影响li,但它会使锚填充li并为其设计样式.
这是我的方式,使用道具的位置。我不知道,但是history.isActive对我来说是不确定的
export default class Navbar extends React.Component {
render(){
const { location } = this.props;
const homeClass = location.pathname === "/" ? "active" : "";
const aboutClass = location.pathname.match(/^\/about/) ? "active" : "";
const contactClass = location.pathname.match(/^\/contact/) ? "active" : "";
return (
- Home
- About
- Contact
);}}