#html #reactjs
Вопрос:
Я пытаюсь добавлять и удалять класс с помощью трех кнопок. Когда я нажимаю, класс должен быть добавлен и удален на других кнопках.
У меня есть постоянная:
const [genderActive, setGenderActive] = useState('');
const isGenderActive = (active) => {
setGenderActive(active);
};
HTML:
<div aria-label="title" role="group" class="btn-group">
<button name="0" type="button" className={genderActive === 0 ? 'selected btn btn-primary' : 'btn btn-primary' } onClick={isGenderActive(0)}>M.</button>
<button name="1" type="button" className={genderActive === 1 ? 'selected btn btn-primary' : 'btn btn-primary' } onClick={isGenderActive(1)}>Mme.</button>
<button name="2" type="button" className={genderActive === 2 ? 'selected btn btn-primary' : 'btn btn-primary' } onClick={isGenderActive(2)}>Mx</button>
</div>
Когда я компилирую react, у меня возникает ошибка:
Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
Я нашел несколько сообщений с этой ошибкой, но я не могу решить проблему.
Знаете ли вы, как я могу решить эту проблему ?
Комментарии:
1. измените
onClick={isGenderActive(0)}
onClick={() => isGenderActive(0)}
и сделайте это для всех экземпляров2. @Апостолос, это работа, спасибо тебе
3. Пожалуйста, обратите внимание, что прямо сейчас при каждом анализе HTML-содержимого вызывается функция. То, что сказал @Apostolos, предотвратит это, обернув его в другую функцию, которая только прикрепляет обработчик событий, а не выполняет его.
Ответ №1:
Потому что вы вызываете isGenderActive
рендеринг. Поэтому измените состояние и повторно отрисовайте. Вы просто обновляете, чтобы убедиться isGenderActive
, что звоните только при нажатии:
onClick={() => isGenderActive(0)}