NavLink 未填充嵌套路由的活动类

Posted

技术标签:

【中文标题】NavLink 未填充嵌套路由的活动类【英文标题】:NavLink not populating active class for nested route 【发布时间】:2021-02-26 00:46:31 【问题描述】:

我有一个 NavBar,它根据选择的页面更改它的活动类。我有一个名为“军官”(/officers) 的页面,其中嵌套了多年的路线。 (/officers/2020、/officers/2019 等)NavBar 对路线 /officers 处于活动状态,但是当我执行任何嵌套路线时,活动类就会消失。我假设我只需要将 Nav.jsx 上的 to= 更改为其他内容,但我无法找到任何内容,并且我想保留它默认为 /officers 路由的功能。

Nav.jsx:

            <NavLink
                exact
                activeClassName="nav active"
                className="nav"
                to="/officers"
            >
                <a id="nav-link-officers" href="officers">Officers</a>
            </NavLink>

App.jsx:

                    <Nav />
                    <Route path="/officers" component=Officers>
                        /* TODO: Fix Year Selector */
                        /* TODO: Fix Nav for nested routes */
                        <Officers></Officers>
                    </Route>

Officers.jsx:

function Officers() 
    return (
        <div id="content">
        <link rel="stylesheet" type="text/css" href="../css/officers.css" />
        <div className="col-sm-8 col-lg-8 fadein">
            <div className="jumbotron main-content padded">
            <div className="container-fluid">
                <div className="navblock">
                <ul className="navbar">
                    /* Ignore this... I was testing another menu */
                    <NavLink
                        exact
                        activeClassName="activeclass"
                        to="/officers/2020"
                    >
                        <a href="/">2020</a>
                    </NavLink>
                    /* <li><Link to="/officers/2020">2020</Link></li> */
                    <li><Link to="/officers/2019">2019</Link></li>
                    <li><Link to="/officers/2018">2018</Link></li>
                    <li><Link to="/officers/2017">2017</Link></li>
                    <li><Link to="/officers/2016">2016</Link></li>
                    <li><Link to="/officers/2015">2015</Link></li>
                </ul>
                </div>
                <Route path="/officers" component=Officers2020 />
                <Route path="/officers/:id" component=OfficerYear />
            </div>
            </div>
        </div>
        </div>
    )

【问题讨论】:

【参考方案1】:

要保持/officers 的导航链接处于活动状态而不考虑嵌套属性,请删除属性exact

        <NavLink
            activeClassName="nav active"
            className="nav"
            to="/officers"
        >
            <a id="nav-link-officers" href="officers">Officers</a>
        </NavLink>

【讨论】:

以上是关于NavLink 未填充嵌套路由的活动类的主要内容,如果未能解决你的问题,请参考以下文章

反应路由器 dom 将活动类设置为 NavLink

ZF_react react-router 使用正则匹配路由,Switch路由,嵌套路由的实现 路由保护 NavLink withRouter

React路由超详解...

反应路由器中的activeClassName同时突出显示两个NavLink

react-router的使用——路由的嵌套

ReactSPA - 路由机制 - react-router-dom - 基本路由 - 嵌套路由 - 传递参数 - 路由跳转