来自react-router-dom Home的Navlink始终处于活动状态

saj*_*saj 0 reactjs react-router-dom

导航工作,家庭链接总是活跃其他链接都可以.添加为组件,没有道具.

HTML

 <Menu/>
Run Code Online (Sandbox Code Playgroud)

CSS

.active{
background-color:#ff6a00;
}
Run Code Online (Sandbox Code Playgroud)

JS

import React, { Component } from 'react';
import './menu.css';
import { NavLink } from 'react-router-dom'
export default class TopMenu extends Component {

 render() {
    return (
        <div className="ui container">
            <div className="ui stackable menu">
                <div className="item">
                    <NavLink to='/' >
                        <i aria-hidden="true" className="home  icon" ></i>
                        Home
                     </NavLink>
                </div>
                <div className="item">
                    <NavLink to='/about' >
                        <i aria-hidden="true" className="circle info  icon" > 
                        </i>
                        About
                    </NavLink>
                </div>

                <div className="item" >
                    <NavLink to='/Settings'>
                        <i aria-hidden="true" className="cogs icon red" ></i>
                        Settings
                    </NavLink>
                </div>
            </div>
        </div>
     );
   }
 }
Run Code Online (Sandbox Code Playgroud)

任何想法,为什么家里总是活跃?

Shu*_*rda 20

您需要提及end回家路线。默认情况下/与其所有后代路径匹配,/about或者/settings也匹配。

<NavLink to="/" end>
  Home
</NavLink>
Run Code Online (Sandbox Code Playgroud)

如果使用 end 属性,它将确保当其后代路径匹配时,该组件不会被匹配为“活动”。

文档: https: //reactrouter.com/en/6/components/nav-link


Ang*_*zar 8

你必须为你的家乡路线'/'指定确切的道具,因为这与所有其他路线相匹配,这就是'/'始终有效的原因.

 <NavLink to='/' exact={true}>
   <i aria-hidden="true" className="home  icon" ></i>
   Home
 </NavLink>
Run Code Online (Sandbox Code Playgroud)

  • 从 v6 开始,这对我不起作用。在文档中,他们说你现在必须使用“end”属性:https://reactrouter.com/docs/en/v6/components/nav-link (12认同)

小智 5

请务必提及end回家 ( '/') 路线。

<NavLink to='/' end>
     <i aria-hidden="true" className="home  icon" ></i>
     Home
</NavLink>
Run Code Online (Sandbox Code Playgroud)