[Изменить] : Мое решение ниже работает нормально, но не использует класс «активный» по умолчанию, добавленный самим маршрутизатором реакции при нажатии на ссылку. Я играл с ним на This Stackblitz для реактивного маршрутизатора (вам нужно будет обновить пакет и изменить Link
на NavLink
, если вы используете маршрутизатор v5), но не смог заставить активный класс работать должным образом , класс active
не был удален из первой ссылки, не знаю почему (но вы можете проверить код, и вы увидите, что добавлен к другим вашим ссылкам ).
Теперь, если хотите, есть также activeStyle
, который вы можете использовать (не рекомендуется, блех).
Все ваши ссылки являются первыми дочерними элементами div, поэтому вы можете:
const App = () => {
const setActiveLink = e => {
// easier for me, you can change with getElementById or getElementByClassName
const links = document.getElementsByTagName("a");
Array.from(links).forEach(el => el.classList.remove("active"));
e.target.classList.add("active");
};
return (
<div className="navbar">
<a href="#" onClick={setActiveLink}>
link 1
</a>
<a href="#" onClick={setActiveLink}>
link 2
</a>
<a href="#" onClick={setActiveLink}>
link 3
</a>
</div>
);
};
Adn в вашем css просто добавьте:
div > a {
text-decoration: none;
padding: 5px;
}
div > a:hover{
border-bottom: 1px solid red;
}
.active {
border-bottom: 1px solid red;
}
Конечно, вы должны адаптировать теги css, которые я выбрал, в соответствии с вашим кодом. Вот пример stackblitz: Пример на Stackblitz