Используйте e.currentTarget , а затем используйте стандартный метод HTML getAttribute
. Принуждение не требуется.
const appMode = e.currentTarget.getAttribute('data-appmode');
(обратите внимание на строчную букву в имени атрибута, чтобы избежать предупреждений от реакции)
currentTarget
уже введен правильно.
Если вы читаете В определениях типов событий React вы можете видеть, что MouseEvent
расширяет SyntheticEvent
, что расширяет BaseSyntheticEvent
, включая, среди прочего, свойства target
и currentTarget
. Предоставленный вами тип HTMLElement
применяется к currentTarget
, поэтому у вас есть доступ ко всем нужным материалам. Если вы используете target
, вы получите ошибку компиляции о том, что getAttribute
недопустимо для типа EventTarget
.
В чем разница?
currentTarget
- это элемент, гдевы кладете свой обработчик, onClick
. target
- это то место, откуда изначально произошло событие ( больше здесь ). Это не обязательно то же самое, потому что события всплывают. См. PR, на который есть ссылка в файле определений типов , для полного обсуждения того, почему они напечатаны по-разному.