React может отображать пользовательские атрибуты, как описано на http://facebook.github.io/react/docs/jsx-gotchas.html :
Если вы хотите использовать пользовательский атрибут, вы должны поставить перед ним префикс data-.
<div data-custom-attribute="foo" />
И это отличная новость, за исключением того, что я не могу найти способ получить к нему доступ из объекта события, например:
render: function() {
...
<a data-tag={i} style={showStyle} onClick={this.removeTag}></a>
...
removeTag: function(event) {
this.setState({inputVal: event.target????});
},
Элемент и data-
свойство рендеринга в HTML хорошо. Стандартные свойства, такие как style
могут быть доступны как event.target.style
хорошо. Вместо того, чтобы event.target
я попытался:
event.target.props.data.tag
event.target.props.data["tag"]
event.target.props["data-tag"]
event.target.data.tag
event.target.data["tag"]
event.target["data-tag"]
ничего из этого не сработало.
javascript
facebook
reactjs
andriy_sof
источник
источник
aria-modal=true
, вы помещаете изменения (в false) в хранилище атрибутов aria / data , но ничего больше не изменяется (например, содержимое компонента или класс или переменные в нем), так как в результате ReactJ не будет обновлять aria / атрибуты данных в этих компонентах. Я целый день возился с этим, чтобы понять это.Ответы:
Чтобы помочь вам получить желаемый результат, возможно, не так, как вы просили:
Обратите внимание на
bind()
. Поскольку это все javascript, вы можете делать удобные вещи, как это. Нам больше не нужно прикреплять данные к узлам DOM, чтобы отслеживать их.ИМО это намного чище, чем полагаться на события DOM.
Обновление апрель 2017: в эти дни я бы написал
onClick={() => this.removeTag(i)}
вместо.bind
источник
unshift
на массив аргументов функции . Если бы «объект события» был в индексе,0
он теперь был бы в индексе1
.removeTag: function(i, evt) {
event.target
дает вам нативный DOM-узел, затем вам нужно использовать обычные DOM API для доступа к атрибутам. Вот документы о том, как это сделать: Использование атрибутов данных .Вы можете сделать либо
event.target.dataset.tag
илиevent.target.getAttribute('data-tag')
; либо один работает.источник
event.target.dataset
не определен, ноevent.target.getAttribute('data-tag')
работает. другие браузеры в порядке. СпасибоshouldComponentUpdate
будет иметь ту же проблему, если вы просто полностью игнорируете функцию prop.event.currentTarget.getAttibute('data-tag')
Вот лучший способ, который я нашел:
Эти атрибуты хранятся в «NamedNodeMap», к которому вы можете легко получить доступ с помощью метода getNamedItem.
источник
.value
чтобы получить реальное значение.value
в конце, как предложилИли вы можете использовать закрытие:
источник
источник
Начиная с React v16.1.1 (2017), вот официальное решение: https://reactjs.org/docs/handling-events.html#passing-arguments-to-event-handlers
TLDR: OP должен делать:
источник
i
это пользовательский атрибут, который OP хотел передать каким-либо образом. Это некоторая переменная, которая находится в области видимости, когдаa
элемент определен.e.currentTarget.attributes['tag'].value
у меня так работаетисточник
Вы можете получить доступ к атрибутам данных примерно так
источник
Эта единственная строка кода решила проблему для меня:
источник
Я не знаю о React, но в общем случае вы можете передать пользовательские атрибуты, как это:
1) определить внутри html-тега новый атрибут с префиксом данных
2) получить из JavaScript с
источник
Если кто-то пытается использовать event.target в React и находит нулевое значение, это происходит потому, что SyntheticEvent заменил event.target. SyntheticEvent теперь содержит «currentTarget», например, в event.currentTarget.getAttribute («data-username»).
https://facebook.github.io/react/docs/events.html
Похоже, что React делает это так, чтобы он работал во многих браузерах. Вы можете получить доступ к старым свойствам через атрибут nativeEvent.
источник
Попробуйте вместо присвоения свойств dom (что медленно) просто передайте свое значение в качестве параметра функции, которая фактически создает ваш обработчик:
источник
Вы можете просто использовать объект event.target.dataset . Это даст вам объект со всеми атрибутами данных.
источник
В React вам не нужны html-данные, используйте функцию, возвращающую другую функцию; как это очень просто отправить пользовательские параметры, и вы можете получить доступ к пользовательским данным и событию.
источник