【发布时间】:2019-12-30 07:38:51
【问题描述】:
我已经使用react-boostrap 库创建了一个导航栏,并且我使用了来自react-router-dom 库的NavLink 导航项。但是activeClassName 的NavLink 属性对我不起作用。它不会自动附加到活动类。我也使用了activeStyle 道具。这是行不通的。下面是我的代码。
// NavigationBar.js
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Redirect } from 'react-router-dom';
import { Navbar, NavDropdown } from 'react-bootstrap';
import { logOutUser } from '../../actions/UserActions';
import NavBarItems from '../../components/NavbarItems/NavbarItems';
class NavBar extends Component {
state = {
isLogOut: false
}
componentDidUpdate(prevProps) {
if (prevProps.user.logout !== this.props.user.logout) {
this.setState({isLogOut: true});
}
}
handleSingnOutOnclick = () => {
this.props.dispatch(logOutUser());
}
render() {
let loggedUser = localStorage.getItem('userName');
return(
<div>
{
this.state.isLogOut ?
<Redirect to="/login" /> :
<div className="main-navbar">
<Navbar className="navbar-height">
<Navbar.Collapse id="basic-navbar-nav">
<NavBarItems />
</Navbar.Collapse>
<NavDropdown
title={loggedUser}
id="basic-nav-dropdown"
className="nav-anchor nav-dropdown"
>
<NavDropdown.Item>Profile</NavDropdown.Item>
<NavDropdown.Item onClick={() => this.handleSingnOutOnclick()}>
Log Out
</NavDropdown.Item>
</NavDropdown>
</Navbar>
<div className="navbar-bottom-line"></div>
</div>
}
</div>
);
}
}
const mapStateToProps = (state) => {
return {
user: state.user
}
}
export default connect(mapStateToProps)(NavBar);
// NavbarItems.js
import React, { Component } from 'react';
import { Nav } from 'react-bootstrap';
import config from '../../config/config';
import MainNavItem from '../NavItem/MainNavItem';
class NavBarItems extends Component {
getNavItems = () => {
const navItems = config.navItems;
return navItems.map((item, i) => {
return (
<MainNavItem
key={i}
currentIndex={i}
item={item}
/>
);
});
}
render() {
return (
<Nav className="mr-auto">
{this.getNavItems()}
</Nav>
);
}
}
export default NavBarItems;
// MainNavItem.js
import React from 'react';
import { NavLink } from 'react-router-dom';
const MainNavItem = (props) => {
const {
item,
} = props;
return (
<NavLink
exact
to={item.link}
activeClassName="active-item"
className="nav-anchor"
>
<li key={item.link} >
<span>{item.text}</span>
</li>
</NavLink>
);
}
export default MainNavItem;
提前致谢。 :)
【问题讨论】:
标签: reactjs react-bootstrap react-router-dom