React. Смена класса по клику onClick
Не совсем понимаю, почему не работает. Заранее спасибо за ответ!
function Menu() {
const [Menu__item, setMenu__item] = useState(`Menu__item`)
function handleClickBtnMenu() {
setMenu__item(function (prevCount) {
if (prevCount === `Menu__item`) {
setMenu__item('Menu__item__active');
} else if (prevCount === `Menu__item__active`) {
setMenu__item(`Menu__item`);
}
})
};
return (
<div className='Header__menu'>
<nav className='Menu__body'>
<ul className='Menu__list'>
<li className={`${Menu__item}`}> ...}
Должен меняться класс у тега li, он меняется, но на undefined
Ответы (2 шт):
Автор решения: Node_pro
→ Ссылка
Метод setMenu__item - на входе принимает аргумент в качестве функции, либо другое значение. Если Вы используете в качестве первого аргумента функцию, вам необходимо с помощью оператора return вернуть значение. В противном случае вы получите undefined.
function handleClickBtnMenu() {
setMenu__item(prevCount => {
if (prevCount === `Menu__item`) {
return 'Menu__item__active';
}
if (prevCount === `Menu__item__active`) {
return `Menu__item`;
}
})
};
Автор решения: SwaD
→ Ссылка
Если вы используете callback функцию для изменения значения сосотояния, то данная функция должна вернуть это значение.
Т.к. у вас 2 значения, можно сделать вот так:
function handleClickBtnMenu() {
setMenu__item(prevCount => prevCount === 'Menu__item' ? 'Menu__item__active' : 'Menu__item');
}
Или выполнить нужные расчеты за пределами функции изменения состояния и передать уже расчитанное значение:
function handleClickBtnMenu() {
const styleNew = Menu__item === 'Menu__item' ? 'Menu__item__active' : 'Menu__item';
setMenu__item(styleNew);
}