与React-Router的活动链接?

saa*_*adq 63 javascript ecmascript-6 reactjs react-router

我尝试作出反应,路由器(V4)和我有开始关闭导航到具有的一个问题Link的是active.如果我点击任何Link标签,那么活动的东西就会开始工作.但是,我希望Home Link能够在应用程序启动时立即激活,因为这是在/路径上加载的组件.有没有办法做到这一点?

这是我目前的代码:

const Router = () => (
  <BrowserRouter>
    <div>
      <Nav>
        <Link activeClassName='is-active' to='/'>Home</Link> {/* I want this to start off as active */}
        <Link activeClassName='is-active' to='/about'>About</Link>
      </Nav>

      <Match pattern='/' exactly component={Home} />
      <Match pattern='/about' exactly component={About} />
      <Miss component={NoMatch} />
    </div>
  </BrowserRouter>
)
Run Code Online (Sandbox Code Playgroud)

wor*_*orc 144

<Link>不再具有activeClassNameactiveStyle属性.在react-router v4中,<NavLink>如果要进行条件样式,则必须使用:

const Router = () => (
  <BrowserRouter>
    <div>
      <Nav>
        <NavLink exact={true} activeClassName='is-active' to='/'>Home</NavLink>
        <NavLink activeClassName='is-active' to='/about'>About</NavLink>
      </Nav>

      <Match pattern='/' exactly component={Home} />
      <Match pattern='/about' exactly component={About} />
      <Miss component={NoMatch} />
    </div>
  </BrowserRouter>
)
Run Code Online (Sandbox Code Playgroud)

我在家中添加了一个确切的属性<NavLink>,我很确定没有它,主页链接将始终处于活动状态,因为/匹配/about和您拥有的任何其他页面.

  • 我今天忽略了这个答案,因为我认为使用 NavLink 乍一看可以避免这个问题。很难找到其他任何地方可以解释这一点。人们需要为这个答案点赞,因为他是完全正确的。你必须使用 NavLink。还!精确={true} 也完全正确。否则,当您单击其他链接导致主页始终处于活动状态时,呈现的第一个链接将不会重新呈现。我希望我能再给你投票 10 次。 (3认同)
  • 简要说明一下,如果您将React与Redux一起使用,则需要遵循以下https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/guides/blocked-updates。 md (2认同)

Chi*_*hor 40

反应路由器 v6:

来源:使用 React Router 的活动 NavLink 类

现在您可以使用className现在接受函数并传递isActive布尔属性的属性,如下所示:

<NavLink
  to="users"
  className={({ isActive }) => (isActive ? 'active' : 'inactive')}
>
  Users
</NavLink>
Run Code Online (Sandbox Code Playgroud)

你还可以添加多个类,因为v6已经发布了:

<NavLink
  to="users"
  className={({ isActive }) =>
    isActive ? 'bg-green-500 font-bold' : 'bg-red-500 font-thin'
  }
>
  Users
</NavLink>
Run Code Online (Sandbox Code Playgroud)

现场演示:使用 React Router 的活动 NavLink 类


小智 13

import { NavLink, useMatch, useResolvedPath } from 'react-router-dom';

const CustomNavLink = ({ to, title }) => {
   let resolved = useResolvedPath(to);
   let match = useMatch({ path: resolved.pathname, end: true });

   return (
      <NavLink to={to} className={`d-flex align-items-center py-2 px-4 ${match ? 'cta-btn' : 'c-n-b-link'}`} >
        <span className='ms-1 f-w-600'>{title}</span>
      </NavLink>
)
}
Run Code Online (Sandbox Code Playgroud)

对于React router V6上面的自定义组件将返回一个导航链接,只要路径与给定to路径匹配,就可以激活活动类。