React bindet Ereignis-Listener selbst, so dass onClick nicht direkt zum onclick-Attribut in DOM führt. Ihr Code funktioniert jedoch (siehe Snippet). obwohl
class PlayerRow extends React.Component {
activateKey() {
console.log('ddd')
}
render() {
return (
<div className="row-par">
<div className="details-cont">
</div>
<div className="key-cont">
<div onClick={this.activateKey} className="key">asd</div>
<div onClick={this.activateKey} className="key">qwe</div>
<div onClick={this.activateKey} className="key">zxc</div>
</div>
</div>
)
}
}
ReactDOM.render(
<PlayerRow/>,
document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
Ich schlage vor, zwei Dinge, verwenden .bind(this)
für Action-Handler oder noch besser, mit dem Pfeil Funktion als es Anwendungsbereich standardmäßig erbt.
Von reagieren docs:
handleClick =() => {
console.log('this is:', this);
}
siehe: https://facebook.github.io/react/docs/handling-events.html
zweite Sache - nicht jQuery verwenden. Sie verwenden React, um DOM zu verwalten, und jQuery erzeugt standardmäßig Nebeneffekte, die die Reaktion beeinträchtigen. React rendert die Ansicht entsprechend dem Status oder den Requisiten der Komponente automatisch, mit ihren Optimierungen, die großartig sind, und jQuery bearbeitet weder Requisiten noch Status, so dass Sie die coolen Sachen der Reaktion nicht nutzen.
Für was Sie erreichen möchten, könnten Sie Ihrem Action-Handler einen Parameter geben, der Ihnen sagt, welcher Block geklickt wurde onClick={() => activateKey(1)}
. Im Handler speichern Sie die aktive ID im lokalen Status und geben Sie Ihren Blöcken die Klasse bedingt, abhängig davon, ob ihre ID mit der Schlüssel-ID übereinstimmt. Das ist meine Idee.
Es gibt keinen Grund, warum die 'onclick'-Eigenschaft im DOM vorhanden sein sollte. Dynamisch angehängte Hörer sind bei der Inspektion nicht unbedingt sichtbar. Funktionieren die Klickhandler? Läuft der Code? Versuchen Sie, auf eines der divs zu klicken. Beachten Sie, dass 'activateKey' möglicherweise' .bind (this) 'benötigt. Die Kombination von React und jQuery ist auch nicht meine Empfehlung – slezica
Warum ermutigen Sie nicht die Verwendung von jQuery mit React? Auch warum reagiert strip out onclick und es ist nicht von normalem HTML entfernt? –
React übernimmt die Handhabung des DOM. Wenn Sie das DOM berühren, können Sie mit React konkurrieren und React gewinnt. Es wird die Freiheit nehmen, DOM-Elemente beliebig zu entfernen, hinzuzufügen und zu modifizieren und möglicherweise Ihre Änderungen zu überschreiben. Wenn Sie React verwenden möchten, ist der sicherste Kurs, jQuery laufen zu lassen. Dieses Beispiel (das "onclick" -Attribut "verschwindet") ist nur eine der vielen, vielen Möglichkeiten, in denen React das DOM abstrahiert – slezica