Pobieranie identyfikatora z div w React.js


Więc próbuję uzyskać dane w atrybucie div w reakcji. JSFiddle pokazuje problemy, z którymi się spotykam. this.state.value jest ustawiane na pusty ciąg po uruchomieniu zdarzenia.
Po przeczytaniu zacząłem używać atrybutu data- * dla div

kolejna wiadomość
https://coderoad.ru/5309926/
przepełnienie stosu, ale nie mogę używać jQuery, więc przełączyłem się na id. Jakieś pomysły?
JSFiddle
https://jsfiddle.net/boloneyshinobi/yw6db9ts/1/
class GettingAttributes extends React.Component {
constructor(props) {
super(props)
this.state = {value: 'Hello!'}; this.bar = this.bar.bind(this);
} bar(e){
this.setState({value: e.target.id})
} render() {
return ( <div id="foo" onClick={this.bar}>
{this.state.value}
);
}
}

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zdobyć przewagę
e.currentTarget.id

zamiast
e.target.id
.currentTarget będzie wskazywać na element, który faktycznie zawiera detektor zdarzeń. W Twoim skrypcie .target to znacznik p zawierający tekst, który nie ma identyfikatora do ustawienia w Twoim stanie.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz to zrobić za pomocą atrybutów
id
oraz
data- *
. Jednak preferowaną metodą są atrybuty
data- *
.
Prosze Zobacz

to
https://jsfiddle.net/yw6db9ts/41/
Link JSFiddle do Twojego rozwiązania.
Musisz ustawić ref na element, z którego chcesz pobrać dane, a następnie możesz go użyć do ustawienia danych na stan. Kod IN, jeśli zamienisz
onClick = {this.bar}
na
onClick = {this.barById}
, kod pobierze dane z
id
, podczas gdy w pierwszym przypadku pobierze dane z atrybutów
data- *
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

powodem, dla którego nie możesz wybrać właściwości
id
, jest to, że bieżący element
e.target
jest elementem podrzędnym elementu
& < div & >
, to
& < p & >
. Oto sugerowane rozwiązanie, które działa:
class GettingAttributes extends React.Component {
constructor(props) {
super(props)
this.state = {value: 'Hello!'}; this.bar = this.bar.bind(this);
} bar(e){
this.setState({value: e.target.id})
} render() { return ( <div id="foo" onClick={this.bar}>
{this.state.value}

);
}
}ReactDOM.render(<GettingAttributes/>, document.querySelector("#app"))

Możesz również rozwiązać ten problem, dodając moduł obsługi kliknięć do elementu
& < p & >
:
<div >
<p id="foo" onClick={this.bar}>{this.state.value}

Korzystanie z
e.currentTarget.id
szybko rozwiąże Twój problem, wystarczy wiedzieć, co oznacza
currentTarget
, a nie tylko
Target
. Powodzenia!

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się