React puede representar atributos personalizados como se describe en http://facebook.github.io/react/docs/jsx-gotchas.html :
Si desea utilizar un atributo personalizado, debe anteponerlo con datos-.
<div data-custom-attribute="foo" />
Y esa es una gran noticia, excepto que no puedo encontrar una manera de acceder desde el objeto del evento, por ejemplo:
render: function() {
...
<a data-tag={i} style={showStyle} onClick={this.removeTag}></a>
...
removeTag: function(event) {
this.setState({inputVal: event.target????});
},
El elemento y la data-propiedad se procesan en html bien. styleSe puede acceder a las propiedades estándar como event.target.stylebien. En lugar de event.targetlo intenté:
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"]
ninguno de estos funcionó.
javascript
facebook
reactjs
andriy_sof
fuente
fuente

aria-modal=true, empuja los cambios (a falso) al almacén de atributos aria / datos , pero no se cambia nada más (como el contenido del componente o la clase o las variables allí) como resultado, ReactJs no actualizará aria / atributos de datos en esos componentes. He estado jugando todo el día para darme cuenta de eso.Respuestas:
Para ayudarlo a obtener el resultado deseado tal vez de una manera diferente a la que solicitó:
Note el
bind(). Debido a que todo esto es javascript, puede hacer cosas útiles como esa. Ya no necesitamos adjuntar datos a los nodos DOM para realizar un seguimiento de ellos.En mi opinión, esto es mucho más limpio que confiar en eventos DOM.
Actualización de abril de 2017: en estos días escribiría en
onClick={() => this.removeTag(i)}lugar de.bindfuente
unshiftla matriz de argumentos de función . Si el "objeto de evento" estuviera en el índice0, ahora estaría en el índice1.removeTag: function(i, evt) {event.targetle proporciona el nodo DOM nativo, luego debe usar las API DOM regulares para acceder a los atributos. Aquí hay documentos sobre cómo hacerlo: Uso de atributos de datos .Puedes hacer cualquiera
event.target.dataset.tagoevent.target.getAttribute('data-tag'); Cualquiera de los dos funciona.fuente
event.target.datasetno está definido peroevent.target.getAttribute('data-tag')funciona. Los otros navegadores están bien. GraciasshouldComponentUpdatetendría el mismo problema a menos que ignorara por completo la función prop.event.currentTarget.getAttibute('data-tag')Aquí está la mejor manera que encontré:
Esos atributos se almacenan en un "NamedNodeMap", al que puede acceder fácilmente con el método getNamedItem.
fuente
.valuepara obtener el valor real.valueal final como sugirióO puede usar un cierre:
fuente
fuente
A partir de React v16.1.1 (2017), aquí está la solución oficial: https://reactjs.org/docs/handling-events.html#passing-arguments-to-event-handlers
TLDR: OP debe hacer:
fuente
ies el atributo personalizado que OP quería pasar de alguna manera. Es una variable que está dentro del alcance cuandoase define el elemento.entonces
e.currentTarget.attributes['tag'].valuefunciona para mifuente
Puede acceder a los atributos de datos de esta manera
fuente
Esta única línea de código resolvió el problema para mí:
fuente
No sé sobre React, pero en el caso general puede pasar atributos personalizados como este:
1) definir dentro de una etiqueta html un nuevo atributo con prefijo de datos
2) obtener de javascript con
fuente
Si alguien está tratando de usar event.target en React y encuentra un valor nulo, es porque un SyntheticEvent ha reemplazado el event.target. SyntheticEvent ahora contiene 'currentTarget', como en event.currentTarget.getAttribute ('data-username').
https://facebook.github.io/react/docs/events.html
Parece que React hace esto para que funcione en más navegadores. Puede acceder a las propiedades antiguas a través de un atributo nativeEvent.
fuente
Intente en lugar de asignar propiedades dom (que es lenta) simplemente pase su valor como un parámetro para funcionar que realmente cree su controlador:
fuente
Simplemente puede usar el objeto event.target.dataset . Esto le dará el objeto con todos los atributos de datos.
fuente
En React no necesita los datos html, use una función para devolver otra función; así es muy simple enviar parámetros personalizados y puedes acceder a los datos personalizados y al evento.
fuente