react-router-dom v6 NavLink 始终处于活动状态

Slo*_*ord 9 react-router react-router-dom

我按照从 v5 升级指南进行操作,但无法使 NavLink 组件正常工作。

https://reactrouter.com/docs/en/v6/upgrading/v5#upgrading-from-v5

v6 导航链接:

    <NavLink
          className={(isActive) =>
            cx(isActive ? classes.linkActive : classes.link)
          }
          to="/seafarers"
          end
        >
          Seafarers
        </NavLink>
        <NavLink
          className={(isActive) =>
            cx(isActive ? classes.linkActive : classes.link)
          }
          end
          to="/"
        >
          Planning
        </NavLink>
Run Code Online (Sandbox Code Playgroud)

路线

    <BrowserRouter>
      <Routes>
        <Route path="/" element={<LoginScreen />} />
        <Route path="login" element={<LoginScreen />} />
        <Route path="forgot-password" element={<ForgotPasswordScreen />} />
        <Route path="seafarers" element={<SeafarersScreen />} />
      </Routes>
    </BrowserRouter>
Run Code Online (Sandbox Code Playgroud)

“/”和“/seafarers”都有活跃等级

注意:NavLink 元素位于 SeafarersScreen 屏幕中

我该如何纠正这个问题?

Slo*_*ord 18

结果我不得不解构 className 的属性,因为三元运算符总是为对象返回 true

    <NavLink
          className={({isActive}) => //(isActive) --> ({isActive})
            cx(isActive ? classes.linkActive : classes.link)
          }
          to="/seafarers"
          end
        >
          Seafarers
        </NavLink>
Run Code Online (Sandbox Code Playgroud)

  • 另外,如果您遇到链接始终在网站根目录保持活动状态的问题,那么使用 end 属性将解决此问题。我曾经面对过的事情。如果使用 end 属性,它将确保当其后代路径匹配时,该组件不会被匹配为“活动”。例如,要呈现仅在网站根目录而不是任何其他 URL 处有效的链接,您可以使用:`&lt;NavLink to="/" end&gt; Home &lt;/NavLink&gt;` (7认同)

eas*_*ipt 5

在父路由上添加end属性。这适用于react-router-dom:6.4.4

    <NavLink
        to="/"
        end
        className={({ isActive }) =>`nav-link ${isActive && 'active'}`}>
      Notes
    </NavLink>
Run Code Online (Sandbox Code Playgroud)

从react-router文档中,这里是链接: https: //reactrouter.com/en/main/components/nav-link