You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router V6中如何让NavLink匹配多路径并激活?

React Router V6 实现NavLink多路径激活

当然可行,React Router V6提供了两种常用方式实现这个需求:

  • 方法一:自定义NavLink的isActive回调函数
    NavLink组件支持传入isActive属性,你可以自定义判断逻辑,只要当前路径匹配"blabla"或"lala"就返回true,触发激活样式。修改你的代码如下:

    <NavLink
      isActive={({ location }) => {
        const targetPaths = ["blabla", "lala"];
        return targetPaths.includes(location.pathname);
      }}
      className={({ isActive }) =>
        concatClasses(classes, 'container', isActive ? 'container--active' : null)
      }
      to={props.route}
    >
      <EDSvg className={classes['container__icon']} name={props.iconName} />
      <span className={classes['container__text']}>{props.text}</span>
    </NavLink>
    

    这里通过location.pathname获取当前路径,判断是否在目标路径数组中,返回的布尔值会直接控制NavLink的激活状态。

  • 方法二:使用useMatch钩子手动匹配路径
    如果需要支持更复杂的路径规则(比如带参数、通配符的路径),可以在组件内部用useMatch钩子分别匹配两个路径,再合并结果:

    import { useMatch } from 'react-router-dom';
    
    // 组件内部逻辑
    const matchBla = useMatch("blabla");
    const matchLala = useMatch("lala");
    const isActive = !!matchBla || !!matchLala;
    
    // 渲染NavLink
    <NavLink
      className={() =>
        concatClasses(classes, 'container', isActive ? 'container--active' : null)
      }
      to={props.route}
    >
      <EDSvg className={classes['container__icon']} name={props.iconName} />
      <span className={classes['container__text']}>{props.text}</span>
    </NavLink>
    

    useMatch在路径匹配成功时会返回匹配对象,失败则返回null,所以只要其中一个路径匹配成功,isActive就会为true。

内容的提问来源于stack exchange,提问作者Tal Rofe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:06:13