Задать вопрос
@webdefvika
SMM специалист

Как в дочернем компоненте react для компонента Link реализовать аналог preventDefault?

Есть компонент PizzaBlock который формирует блок товаров. Это функциональный компонент с типом React.FC

650a9e042da30463194768.jpeg

В самом компоненте PizzaBlock у меня есть кнопка Добавить которая позволяет добавлять товар в корзину на основе обработчика onClick где вызывается функция добавления товара.

650a9e891ae35352146872.jpeg

<button onClick={onClickAdd()}  className="button button--outline button--add">
       <span>Добавить</span>
       {addedCount > 0 && <i>{addedCount}</i>}
 </button>


Добавление в корзину отрабатывает нормально. Но возникает другая проблема каждый раз когда я кликаю на кнопку Добавить происходит переход на детальную страницу товара вместо того чтобы оставлять пользователя на странице списка товаров, это происходит из за того что в файле вывода списка товаров я обхожу массив данных используя Map и формирую список товаров где каждый товар (компонент PizzaBlock) у меня обернут в компонент Link

const pizzas = items.map((obj: any) => (
    	<Link key={obj.id} to={`/pizza/${obj.id}`}>
    		<PizzaBlock  {...obj} />
    	</Link>
    ));


Подскажите как сделать так чтобы переход на детальную страницу отрабатывал только в том случае если пользователь кликает на блок с товаром, но если он будет кликать на кнопку Добавить происходило только добавление товара в корзину, но сам Link не отрабатывал? Наверное нужен некий аналог Event.preventDefault() и Event.stopPropagation() которые есть в нативном JavaScript
  • Вопрос задан
  • 101 просмотр
Подписаться 1 Средний 3 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
  • Академия Eduson
    React-разработчик
    2 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 1
szQocks
@szQocks
просто вызови e.preventDefault в обработчике кнопки, зачем это надо ?

событие клик можно отменить - как будто и не было, если вывести в консоль лог e.cancelable и посмотреть если оно равно true то событие можно отменить дока
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
от 250 000 до 300 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽