Я пытаюсь установить активный класс на дочернем компоненте B, отключая активный класс на дочернем компоненте A, когда нажимаю B. B. 1001 *
До сих пор я пытался использовать хуки в родительском классе, где я отключилактивная поддержка на всех дочерних элементах с помощью setActive('');
с последующим установлением класса текущей цели для ссылки - активная с помощью e.currentTarget.className === 'link--active' ? e.currentTarget.className = '' : e.currentTarget.className = 'link--active';
.К сожалению, все, что он делает в данный момент, это добавляет класс или удаляет его у дочернего элемента, по которому щелкнули.
Родитель:
const [active, setActive] = useState('');
const navigate = (e) => {
setActive('');
e.currentTarget.className === 'link--active' ? e.currentTarget.className = '' : e.currentTarget.className = 'link--active';
};
и в операторе возврата:
{menuItems.map((item, index) => (
<li key={index} >
<NavLink target={item} onClick={(e) => navigate(e)} active={active} />
</li>
))}
Дети:
<a href="#"
onClick={props.onClick}
className={props.active}>
{props.target}
</a>
Редактировать:
После использования решения от Ori Drori активный класс был установлен на нажатой NavLink и удален от остальных.Так как я хотел, чтобы onClick был функцией навигации, все, что я изменил, - это установил onClick в родительском элементе для навигации и получил вызов функции навигации setActive, используя id в качестве параметра и вызвав setActive в функции навигации с id в качестве параметра снова.Классы теперь выглядят так:
Родитель:
const [active, setActive] = useState(null);
const navigate = (id) => {
setActive(id);
};
return (
{menuItems.map((item) => (
<li key={item.id} >
<NavLink
{...item}
isActive={active === item.id}
onClick={navigate} />
</li>
))}
)
Ребенок:
const NavLink = ({id, target, isActive, onClick}) => {
return (
<a href="#"
onClick={useCallback(() => onClick(id), [id, onClick])}
className={isActive ? 'active' : ''}>
{target}
</a>
);
}