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

IT技术 reactjs list react-router navigation-drawer material-ui
2021-04-30 15:16:42

我是 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 核心并最终做了下面的新样式

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看起来像下面这样:

在此处输入图片说明

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

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

这是结果:

在此处输入图片说明

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

我想保持第一UI我不wan't它,使其看起来像一个锚标记下线以下

我怎样才能处理与react-router集成in material/ui活动状态这样我就可以放一些样式或使用活动类的材料。ListItemNavLinkLink

感谢有人可以提供帮助。提前致谢。

3个回答

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

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

希望能帮助到你!

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

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

您可以使用以下内容附加一个类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;
}