реагировать, как заставить onClick не работать только с определенными элементами

#reactjs #typescript #next.js

#reactjs #typescript #next.js

Вопрос:

среда
разработки
react.js машинописный
текст next.js

Я не хочу запускать процесс onClick при нажатии тега span.
Как я должен это реализовать?

  return (
    <div className="padding-16 flex gap-5 flex-container" onClick={onClickUser}>
        <img src={img} />
      <div className="flex flex-direction gridgap-5">
        <p>
          {name}
        </p>
        <p>
          {age}
        </p>
      </div>
      <span className="hover" onClick={isShowCard}>
        <img src="img/dot.svg" />
      </span>
    </div>
)
  

Ответ №1:

Вы можете использовать stopPropagation() для span события щелчка.

  isShowCard = (event) => {
     event.stopPropagation()
     ...
 }
 return (
    <div className="padding-16 flex gap-5 flex-container" onClick={onClickUser}>
        <img src={img} />
      <div className="flex flex-direction gridgap-5">
        <p>
          {name}
        </p>
        <p>
          {age}
        </p>
      </div>
      <span className="hover" onClick={isShowCard}>
        <img src="img/dot.svg" />
      </span>
    </div>
)
  

Комментарии:

1. Что, если у меня уже есть onclick, определенный в теге span?

2. <img src=»img/dot.svg» /></span>

Ответ №2:

onClickUser Перед продолжением проверьте, есть ли у него предок с именем класса hover . Например, изменить:

 const onClickUser = (e) => {
  // code
};
  

Для

 const onClickUser = (e) => {
  if (e.target.closest('.hover')) {
    // do nothing
    return;
  }
  // code
};
  

Комментарии:

1. Это не будет иметь никакого значения вообще, поскольку этот код изменяет только родительский обработчик. Код в ответе будет работать независимо.