Как сделать так, чтобы класс "active" добавлялся при первом клике на "Оценки" вместо второго клика в вашем коде React Navigation?
В React Navigation для добавления класса "active" при первом клике на элемент навигации, а не на втором, можно использовать состояние компонента, чтобы отслеживать текущий выбранный элемент. Например, можно создать состояние "activeTab" и при нажатии на элемент навигации изменять это состояние, добавляя класс "active" к выбранному элементу. Пример кода: ```jsx import React, { useState } from 'react'; const Navigation = () => { const [activeTab, setActiveTab] = useState(null); const handleTabClick = (id) => { setActiveTab(id); } return ( <div> <button className={activeTab === 'tab1' ? 'active' : ''} onClick={() => handleTabClick('tab1')}>Оценки</button> <button className={activeTab === 'tab2' ? 'active' : ''} onClick={() => handleTabClick('tab2')}>Задания</button> </div> ); } ``` В этом примере, при клике на элемент навигации, состояние "activeTab" будет изменяться, и класс "active" будет добавляться к выбранному элементу. Таким образом, при первом клике на "Оценки", класс "active" будет добавлен к этому элементу.
Я так понимаю Вам просто нужно подсвечивать активную ссылку? Можно написать так:
const Navigation: React.FunctionComponent = () => { const routeList: RouteItem[] = [ { name: 'Главная', path: '/' }, { name: 'Оценки', path: '/grade' } ] function getClassName({ isActive }: { isActive: boolean }): string { return `${styles.link} ${isActive ? styles.active : 0}` } return ( <ul className={styles.list}> { routeList.map((route) => ( <li key={route.path} className={styles.item}> <NavLink to={route.path} className={getClassName} data-scroll> {route.name} </NavLink> </li> )) } </ul> ) }
Библиотека react-router-dom предоставляет компоненты Link и NavLink , где второй может принимать в качестве className функцию, которая принимает такие параметры как isActive , isPending и т.п.
Так что состояние тут явно лишнее, как и обработка клика по элементам li )
upd :
Чтобы не заморачиваться с длинными именами классов - установите маленькую библиотеку classnames :
function getClassName({ isActive }: { isActive: boolean }): string { return classNames(styles.link, { [styles.active]: isActive }) }