У меня есть нижний навигационный список элементов div, каждый из которых содержит значок svg. Когда пользователь щелкает значок, мне нужно данное свойство id, чтобы установить состояние, в котором затем отображается конкретный контент. Я на самом деле понял это, но проблема со встроенным svg заключается в том, что переданный event.target
является либо тегом <div>
, либо тегом <svg>
, либо даже более низким тегом <path>
. Я предполагаю решение, в котором всякий раз, когда пользователь щелкает, событие всегда всплывает до div.id
и возвращается для установки в состояние.
Нужно ли вручную устанавливать обработчик кликов на каждом дочернем узле или есть другой способ?
Пример:
const Nav = () => {
return (
<nav>
<div id="I-WANT-YOU" onClick={event => whatToDoHere(event)}>
<svg fill="#systemValue">
<path ....long path .... />
</svg>
</div>
.... repeat 5 times
</nav>
)
}
Теперь у меня есть грязное решение для установки значка svg как background-image: url('path/here.svg');
, но намерение встроить значки svg состоит в том, что я могу установить пользовательские значения fill
, что будет невозможно с этим решением.
ПРИМЕЧАНИЕ:
- Да, я знаю о
<ul>
и<li>
, стараюсь максимально просто описать проблему. - Мои знания о делегировании событий ограничены, и я знаю о параметре
true
в прослушивателе событий ванильного клика. ДокументацияonClickCapture
React мне не помогла.
onClickCapture
не подходит? События имеют две фазы. Сначала событие распространяется от оконного контейнера к элементу dom, по которому щелкнули (это этап захвата). И затем фаза всплытия — это событие, всплывающее обратно к элементу окна. Если вы установитеonClickCapture
для родительского элемента div, вы будете получать все входящие события для любого дочернего элемента, по которому щелкнули. Поможет ли это? Если это кажется вам правильным, я сделаю это ответом. - person Antoine Laffargue   schedule 13.01.2021onClickCaptue
дляdiv
, он по-прежнему нацелен на<path>
,<svg>
илиdiv
. - person andylib93   schedule 13.01.2021