React jest w stanie renderować niestandardowe atrybuty zgodnie z opisem na stronie http://facebook.github.io/react/docs/jsx-gotchas.html :
Jeśli chcesz użyć niestandardowego atrybutu, powinieneś go poprzedzić danymi.
<div data-custom-attribute="foo" />
I to jest dobra wiadomość, ale nie mogę znaleźć sposobu, aby uzyskać do niej dostęp z obiektu zdarzenia, np .:
render: function() {
...
<a data-tag={i} style={showStyle} onClick={this.removeTag}></a>
...
removeTag: function(event) {
this.setState({inputVal: event.target????});
},
Element i data-
właściwość są renderowane w formacie HTML. style
Dostęp do standardowych właściwości, takich jak, można uzyskać w event.target.style
porządku. Zamiast event.target
próbowałem:
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"]
żaden z nich nie działał.
javascript
facebook
reactjs
andriy_sof
źródło
źródło
aria-modal=true
, przesuwasz zmiany (do wartości false) do magazynu atrybutów aria / data , ale nic innego się nie zmienia (takie jak zawartość komponentu lub klasa lub zmienne w nim zawarte), w wyniku czego ReactJs nie zaktualizuje aria / atrasy danych w tych komponentach. Przez cały dzień bawiłem się, żeby to zrozumieć.Odpowiedzi:
Aby pomóc Ci uzyskać pożądany rezultat w inny sposób niż poprosiłeś:
Zwróć uwagę na
bind()
. Ponieważ to wszystko jest javascript, możesz robić takie przydatne rzeczy. Nie musimy już dołączać danych do węzłów DOM w celu ich śledzenia.IMO jest to o wiele czystsze niż poleganie na zdarzeniach DOM.
Aktualizacja kwietnia 2017 r .: W dzisiejszych czasach pisałbym
onClick={() => this.removeTag(i)}
zamiast.bind
źródło
unshift
funkcji . Gdyby „obiekt zdarzenia” był w indeksie , teraz byłby w indeksie .0
1
removeTag: function(i, evt) {
event.target
daje natywny węzeł DOM, a następnie musisz użyć zwykłych interfejsów API DOM, aby uzyskać dostęp do atrybutów. Oto dokumenty, jak to zrobić: Korzystanie z atrybutów danych .Można wykonać jedną
event.target.dataset.tag
lubevent.target.getAttribute('data-tag')
; jedno z nich działa.źródło
event.target.dataset
jest niezdefiniowany, aleevent.target.getAttribute('data-tag')
działa. inne przeglądarki są w porządku. DziękishouldComponentUpdate
miałaby ten sam problem, chyba że całkowicie zignorowałeś prop funkcji.event.currentTarget.getAttibute('data-tag')
Oto najlepszy sposób, jaki znalazłem:
Te atrybuty są przechowywane w „NamedNodeMap”, do którego można łatwo uzyskać dostęp za pomocą metody getNamedItem.
źródło
.value
aby uzyskać rzeczywistą wartość.value
na końcu, jak sugerujeLub możesz użyć zamknięcia:
źródło
źródło
Począwszy od wersji 16.1.1 React (2017), oto oficjalne rozwiązanie: https://reactjs.org/docs/handling-events.html#passing-arguments-to-event-handlers
TLDR: OP powinien wykonać:
źródło
i
jest niestandardowym atrybutem, który OP chciał jakoś przekazać. Jest to jakaś zmienna, która wchodzi w zakres, gdya
element jest zdefiniowany.tak
e.currentTarget.attributes['tag'].value
działa dla mnieźródło
Możesz uzyskać dostęp do atrybutów danych czegoś takiego
źródło
Ten pojedynczy wiersz kodu rozwiązał dla mnie problem:
źródło
Nie wiem o React, ale w ogólnym przypadku możesz przekazać niestandardowe atrybuty:
1) Zdefiniuj w tagu HTML nowy atrybut z prefiksem danych
2) pobierz z javascript za pomocą
źródło
Jeśli ktoś próbuje użyć event.target w React i znajduje wartość pustą, to dlatego, że SyntheticEvent zastąpił event.target. SyntheticEvent przechowuje teraz „currentTarget”, na przykład w event.currentTarget.getAttribute („data-username”).
https://facebook.github.io/react/docs/events.html
Wygląda na to, że React robi to, dzięki czemu działa w wielu przeglądarkach. Możesz uzyskać dostęp do starych właściwości za pomocą atrybutu nativeEvent.
źródło
Spróbuj zamiast przypisywać właściwości dom (co jest wolne), po prostu przekaż swoją wartość jako parametr do funkcji, która faktycznie tworzy program obsługi:
źródło
Możesz po prostu użyć obiektu event.target.dataset . To da ci obiekt ze wszystkimi atrybutami danych.
źródło
W React nie potrzebujesz danych HTML, użyj funkcji zwróć inną funkcję; w ten sposób wysyłanie niestandardowych parametrów jest bardzo proste i można uzyskać dostęp do niestandardowych danych i zdarzenia.
źródło