O React é capaz de renderizar atributos personalizados, conforme descrito em http://facebook.github.io/react/docs/jsx-gotchas.html :
Se você quiser usar um atributo customizado, prefixe-o com data-.
<div data-custom-attribute="foo" />
E isso é uma ótima notícia, exceto que não consigo encontrar uma maneira de acessá-lo a partir do objeto de evento, por exemplo:
render: function() {
...
<a data-tag={i} style={showStyle} onClick={this.removeTag}></a>
...
removeTag: function(event) {
this.setState({inputVal: event.target????});
},
O elemento e a data-
propriedade são renderizados em html fine. Propriedades padrão como style
podem ser acessadas como event.target.style
perfeitas. Em vez de event.target
eu tentei:
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"]
nada disso funcionou.
javascript
facebook
reactjs
andriy_sof
fonte
fonte
aria-modal=true
, você envia as alterações (para false) para o armazenamento de atributos de ária / dados , mas nada mais é alterado (como o conteúdo, classe ou variáveis do componente), pois o ReactJs não atualiza ária / dados atraem nesses componentes. Eu estive brincando o dia inteiro para perceber isso.Respostas:
Para ajudá-lo a obter o resultado desejado de uma maneira talvez diferente da solicitada:
Observe o
bind()
. Como tudo isso é javascript, você pode fazer coisas úteis assim. Não precisamos mais anexar dados aos nós do DOM para controlá-los.Na IMO, isso é muito mais limpo do que depender de eventos DOM.
Atualização de abril de 2017: Hoje em dia eu escreveria em
onClick={() => this.removeTag(i)}
vez de.bind
fonte
unshift
a matriz de argumentos da função . Se o "objeto de evento" estivesse no índice0
, agora estaria no índice1
.removeTag: function(i, evt) {
event.target
fornece o nó DOM nativo, você precisa usar as APIs DOM regulares para acessar atributos. Aqui estão os documentos sobre como fazer isso: Usando atributos de dados .Você pode fazer um
event.target.dataset.tag
ouevent.target.getAttribute('data-tag')
; qualquer um funciona.fonte
event.target.dataset
é indefinido, masevent.target.getAttribute('data-tag')
funciona. os outros navegadores estão bem. ObrigadoshouldComponentUpdate
teria o mesmo problema, a menos que você apenas ignorasse completamente a função prop.event.currentTarget.getAttibute('data-tag')
Aqui está a melhor maneira que encontrei:
Esses atributos são armazenados em um "NamedNodeMap", que você pode acessar facilmente com o método getNamedItem.
fonte
.value
para obter o valor real.value
no final como @Wikunia sugeriuOu você pode usar um fechamento:
fonte
fonte
A partir do React v16.1.1 (2017), aqui está a solução oficial: https://reactjs.org/docs/handling-events.html#passing-arguments-to-event-handlers
TLDR: OP deve fazer:
fonte
i
é o atributo personalizado que o OP queria passar de alguma forma. É alguma variável que está no escopo quando oa
elemento é definido.então
e.currentTarget.attributes['tag'].value
funciona para mimfonte
Você pode acessar atributos de dados algo como isto
fonte
Esta única linha de código resolveu o problema para mim:
fonte
Eu não sei sobre o React, mas no caso geral, você pode transmitir atributos personalizados como este:
1) defina dentro de uma tag html um novo atributo com prefixo de dados
2) obtenha do javascript com
fonte
Se alguém estiver tentando usar event.target no React e encontrar um valor nulo, é porque um SyntheticEvent substituiu o event.target. O SyntheticEvent agora contém 'currentTarget', como em event.currentTarget.getAttribute ('data-username').
https://facebook.github.io/react/docs/events.html
Parece que o React faz isso para que funcione em mais navegadores. Você pode acessar as propriedades antigas por meio de um atributo nativeEvent.
fonte
Tente, em vez de atribuir propriedades dom (que é lenta), apenas passe seu valor como um parâmetro para a função que realmente cria seu manipulador:
fonte
Você pode simplesmente usar o objeto event.target.dataset . Isso fornecerá o objeto com todos os atributos de dados.
fonte
No React, você não precisa dos dados html, use uma função return uma outra função; assim, é muito simples enviar parâmetros personalizados e você pode acessar os dados personalizados e o evento.
fonte