Почему на моем маршрутизаторе React NavLink для ‘/’ сохраняется его activeClassName, когда я удаляюсь от него?

#reactjs #react-router

#reactjs #реагировать-маршрутизатор

Вопрос:

У меня есть панель навигации с тремя компонентами / ссылками. Структура выглядит следующим образом:

 <ul className="flex text-white flex-col lg:flex-row list-none lg:ml-auto">
    <NavLink
       activeClassName="active"
       to="/"
     >
        Home
     </NavLink>

     <NavLink
       activeClassName="active"
       to="/about"
      >
        <span className="ml-2">About</span>
      </NavLink>

     // etc
  

Я подключил его к браузерному маршрутизатору, который корректно изменяет страницы, которые передаются в <Route> ‘s, поэтому я считаю, что я все правильно настроил.

 <div className="App">
  <Navbar />
  <Route path="/about" component={About} />
  <Route exact path="/" component={Home} />
</div>
  

У меня есть класс ‘active’ в моем файле App.css, чтобы изменить цвет шрифта кнопки на красный. Это работает, но проблема для меня в том, что ссылка / home никогда не теряет свой активный класс. Пример изображения:

[! [введите описание изображения здесь] [1]] [1]

Я упускаю что-то очевидное здесь? [1]: https://i.stack.imgur.com/w3rHD.png

Ответ №1:

Я не знаю, использую ли я ту же версию, что и вы, но я всегда использовал isActive для NavLinks, чтобы определить, активны они или нет.

 <NavLink to="/" isActive={(match, location) => {
  return location.pathname === "/";
}} activeClassName="active">Home</NavLink>
  

Просто выполнил быстрый поиск и нашел это, что может быть полезно: https://reactrouter.com/web/api/NavLink

Ответ №2:

Вам также нужно установить exact для root <NavLink/> ,

  <NavLink exact to="/">Home</NavLink>
  

вот так ^

https://codesandbox.io/s/react-router-sidebar-forked-dd724?file=/example.js:1210-1279