event.preventDefault() — отменяет стандартное действие браузера (переход по ссылке, отправку формы и т. д.), но событие продолжает всплывать.event.stopPropagation() — останавливает распространение события по дереву (всплытие/перехват), но стандартное действие по умолчанию остаётся.preventDefaultОтменяет стандартное поведение элемента:
href.Событие при этом продолжает распространяться, то есть обработчики на родителях всё ещё сработают.
Мини‑пример:
// Ссылка не перейдёт по адресу, родительский обработчик выполнится
parent.addEventListener('click', () => console.log('parent'));
link.addEventListener('click', (e) => {
e.preventDefault();
console.log('link');
});stopPropagationОстанавливает дальнейшее распространение события (ниже по цепочке всплытия или выше при перехвате). Стандартное действие браузера при этом не отменяется.
Мини‑пример:
// Клик по кнопке не достигает родителя, но действие кнопки сохраняется
card.addEventListener('click', () => console.log('card'));
button.addEventListener('click', (e) => {
e.stopPropagation();
console.log('button');
});stopPropagation не отменяет действие браузера — для этого нужен preventDefault.preventDefault не останавливает всплытие — для этого нужен stopPropagation.event.stopImmediatePropagation().Если клик по вложенной ссылке внутри карточки не должен:
href (отменяем действие),то вызовите оба:
link.addEventListener('click', (e) => {
e.preventDefault();
e.stopPropagation();
});В синтетических событиях React методы работают аналогично DOM:
e.preventDefault() — отменяет действие.e.stopPropagation() — останавливает распространение.
Учтите, что обработчики onClickCapture срабатывают на фазе перехвата раньше обычных onClick.