React est capable de restituer des attributs personnalisés comme décrit sur http://facebook.github.io/react/docs/jsx-gotchas.html :
Si vous souhaitez utiliser un attribut personnalisé, vous devez le préfixer avec data-.
<div data-custom-attribute="foo" />
Et c'est une excellente nouvelle, sauf que je ne peux pas trouver un moyen d'y accéder à partir de l'événement, par exemple:
render: function() {
...
<a data-tag={i} style={showStyle} onClick={this.removeTag}></a>
...
removeTag: function(event) {
this.setState({inputVal: event.target????});
},
L'élément et la data-
propriété s'affichent correctement en html. Les propriétés standard comme style
peuvent être consultées aussi event.target.style
bien. Au lieu de event.target
j'ai essayé:
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"]
rien de tout cela n'a fonctionné.
javascript
facebook
reactjs
andriy_sof
la source
la source
aria-modal=true
, vous poussez les modifications (sur false) dans le magasin d' attributs aria / data , mais rien d'autre n'est modifié (comme le contenu ou la classe du composant ou les variables dedans) car le résultat ReactJs ne mettra pas à jour aria / attrs de données dans ces composants. J'ai déconné toute la journée pour le réaliser.Réponses:
Pour vous aider à obtenir le résultat souhaité d'une manière peut-être différente de celle que vous avez demandée:
Remarquez le
bind()
. Parce que tout cela est javascript, vous pouvez faire des choses pratiques comme ça. Nous n'avons plus besoin de joindre des données aux nœuds DOM pour en garder la trace.OMI, c'est beaucoup plus propre que de compter sur les événements DOM.
Mise à jour d'avril 2017: ces jours-ci, j'écrirais
onClick={() => this.removeTag(i)}
au lieu de.bind
la source
unshift
le tableau d' arguments de fonction . Si l '"objet événement" était à l'index,0
il le serait désormais à l'index1
.removeTag: function(i, evt) {
event.target
vous donne le nœud DOM natif, vous devez alors utiliser les API DOM normales pour accéder aux attributs. Voici des documents sur la façon de procéder: Utilisation des attributs de données .Vous pouvez faire soit
event.target.dataset.tag
ouevent.target.getAttribute('data-tag')
; l'un ou l'autre fonctionne.la source
event.target.dataset
n'est pas défini maisevent.target.getAttribute('data-tag')
fonctionne. les autres navigateurs vont bien. MercishouldComponentUpdate
aurait le même problème, sauf si vous avez complètement ignoré la fonction prop.event.currentTarget.getAttibute('data-tag')
Voici le meilleur moyen que j'ai trouvé:
Ces attributs sont stockés dans un "NamedNodeMap", auquel vous pouvez accéder facilement avec la méthode getNamedItem.
la source
.value
pour obtenir la valeur réelle.value
à la fin comme l'a suggéréOu vous pouvez utiliser une fermeture:
la source
la source
Depuis React v16.1.1 (2017), voici la solution officielle: https://reactjs.org/docs/handling-events.html#passing-arguments-to-event-handlers
TLDR: OP devrait faire:
la source
i
est l'attribut personnalisé que OP voulait transmettre d'une manière ou d'une autre. C'est une variable qui est dans la portée lorsque l'a
élément est défini.e.currentTarget.attributes['tag'].value
fonctionne donc pour moila source
Vous pouvez accéder aux attributs de données comme ceci
la source
Cette seule ligne de code a résolu le problème pour moi:
la source
Je ne connais pas React, mais dans le cas général, vous pouvez passer des attributs personnalisés comme celui-ci:
1) définir à l'intérieur d'une balise html un nouvel attribut avec préfixe de données
2) Obtenez de javascript avec
la source
Si quelqu'un essaie d'utiliser event.target dans React et trouve une valeur nulle, c'est parce qu'un SyntheticEvent a remplacé event.target. Le SyntheticEvent contient désormais «currentTarget», comme dans event.currentTarget.getAttribute («data-username»).
https://facebook.github.io/react/docs/events.html
Il semble que React le fasse pour qu'il fonctionne sur plus de navigateurs. Vous pouvez accéder aux anciennes propriétés via un attribut nativeEvent.
la source
Essayez au lieu d'attribuer des propriétés dom (ce qui est lent), passez simplement votre valeur en tant que paramètre à la fonction qui crée réellement votre gestionnaire:
la source
Vous pouvez simplement utiliser l' objet event.target.dataset . Cela vous donnera l'objet avec tous les attributs de données.
la source
Dans React vous n'avez pas besoin des données html, utilisez une fonction pour retourner une autre fonction; comme cela, il est très simple d'envoyer des paramètres personnalisés et vous pouvez accéder aux données personnalisées et à l'événement.
la source