Это происходит из-за распространения события. Как вы можете видеть, вы связали событие с родительским div. Таким образом, всякий раз, когда вы нажимаете на кнопке, событие родительского div также выполняется .
Почему он работает с setTimeout
?
Поскольку он выполняется после события div, потому что он был передан другому асинхронному c процессу и требуется время, чтобы выполнить.
Вы можете добавить event.stopPropagation()
, чтобы остановить всплывающее событие в DOM:
const acceptOne = e => {
e.stopPropagation();
setEditMode(!editMode);
};
const acceptTwo = e => {
e.stopPropagation();
setEditMode(!editMode);
};
Теперь измените событие на:
onClick={acceptOne}
onClick={acceptTwo}
или:
onClick={e => acceptOne(e)}
onClick={e => acceptTwo(e)}