React Router V4使用Material UI在ListItem内实现NavLink

时间:2018-12-12 01:08:13

标签: reactjs list react-router navigation-drawer material-ui

我是React的新手,我使用登录仪表板页面创建了一个简单的应用程序。我已经使用重定向功能成功配置了公共路由专用路由。但是,当我想要实现material-ui/core时,一切仍然可以很好地工作,但是我无法实现我想要的 UI

这是我下面的 NavBar 的旧实现:

const Navigation = () => {
    return (
        <div>
            <NavLink exact to="/" activeStyle={{ color: 'red' }}>Home</NavLink>
            <NavLink to="/about" activeStyle={{ color: 'red' }}>About</NavLink>
            <NavLink to="/contact" activeStyle={{ color: 'red' }}>Contact</NavLink>
        </div>
    )
}

export default Navigation

就像没有样式

一样简单

但是由于我想添加一些样式,所以我使用了 material / ui core ,并最终在下面进行了新的设计:

export const MainNavigation = (
  <div>
    <ListItem button>
      <ListItemIcon>
        <DashboardIcon />
      </ListItemIcon>
      <ListItemText primary="Dashboard" />
    </ListItem>
    <ListItem button>
      <ListItemIcon>
        <ShoppingCartIcon />
      </ListItemIcon>
      <ListItemText primary="Orders" />
    </ListItem>
    <ListItem button>
      <ListItemIcon>
        <PeopleIcon />
      </ListItemIcon>
      <ListItemText primary="Customers" />
    </ListItem>
    <ListItem button>
      <ListItemIcon>
        <BarChartIcon />
      </ListItemIcon>
      <ListItemText primary="Reports" />
    </ListItem>
    <ListItem button>
      <ListItemIcon>
        <LayersIcon />
      </ListItemIcon>
      <ListItemText primary="Integrations" />
    </ListItem>
  </div>
);

现在第一个ListItem如下所示:

enter image description here

但是当我在下面添加以下代码行时:

<ListItemText primary={<NavLink exact to="/">Dashboard</NavLink>} />

这是结果:

enter image description here

但我不希望这种情况发生。

我想保留第一个 UI ,我不想让它看起来像 anchor标签,并在下面的行下显示

如何在与React Router ListItemNavLink集成的Material / UI中处理Link活动状态?这样我可以放一些样式或使用活动的材料类。

感谢有人可以帮助您。 预先感谢。

3 个答案:

答案 0 :(得分:21)

使用ListItem的组件属性。要获得有效的路线样式,请将NavLink的activeClassName设置为Mui-selected。

<ListItem button component={NavLink} to="/" activeClassName="Mui-selected" exact>
  ...
</ListItem>

答案 1 :(得分:3)

您可以通过将NavLink设置为列表项的组件来实现。这是一个对我有用的例子!

<ListItem
  button
  key="Dashboard"
  component={NavLink} to="/dashboard"
>
    <ListItemIcon>
        <Dashboard />
    </ListItemIcon>
    <ListItemText primary="Dashboard" />
</ListItem>

希望有帮助!

答案 2 :(得分:0)

您可以使用类似的方法将类附加到NavLink

<NavLink to="/" className="nav-link-item">
  Dashboard
</NavLink>

然后,将样式附加到此类:

.nav-link-item {
  color: inherit;
  text-decoration: none;
}

.nav-link-item:hover,
.nav-link-item:active,
.nav-link-item:visited {
  color: red;
  text-decoration: none;
}

/* Styling for when the link is active */
.nav-link-item.active {
  color: green;
}