ich habe
var TestApp = React.createClass({
getComponent: function(){
console.log(this.props);
},
render: function(){
return(
<div>
<ul>
<li onClick={this.getComponent}>Component 1</li>
</ul>
</div>
);
}
});
React.renderComponent(<TestApp />, document.body);
Ich möchte den Hintergrund des angeklickten Listenelements einfärben. Wie kann ich das in React machen?
Etwas wie
$('li').on('click', function(){
$(this).css({'background-color': '#ccc'});
});
javascript
jquery
reactjs
user544079
quelle
quelle
event.currentTarget.style.backgroundColor = '#ccc';
sei denn, Sie verstehen wirklich, was Sie tun (meistens, während Sie Widgets von Drittanbietern integrieren).Ich kann mir zwei Möglichkeiten vorstellen
Das ist mein persönlicher Favorit.
Hier ist eine DEMO
Ich hoffe das hilft.
quelle
.bind
kein zusätzlicher Parameter verwendet wird. Aber im ersten Fall schon. Ich glaube nicht, dass es einen anderen Weg gibtSo definieren Sie einen React onClick-Ereignishandler , der den Fragentitel mit der es6-Syntax beantwortet hat
quelle
bind
noch Pfeilfunktionen sollten inrender
Methoden verwendet werden , da sie dazu führen, dass jedes Mal eine neue Funktion erstellt wird. Dies hat zur Folge, dass der Status der Komponente geändert wird und Komponenten mit geändertem Status immer neu gerendert werden. Für eine Singlea
ist das keine große Sache. Bei generierten Listen mit anklickbaren Elementen wird dies sehr schnell zu einer großen Sache. Deshalb wird ausdrücklich davor gewarnt.Verwenden Sie ECMA2015. Pfeilfunktionen machen "dies" viel intuitiver.
quelle
index
macht hier nichts?Wenn Sie ES6 verwenden, finden Sie hier einen einfachen Beispielcode:
In ES6-Klassenkörpern benötigen Funktionen nicht mehr das Schlüsselwort 'function' und müssen nicht durch Kommas getrennt werden. Wenn Sie möchten, können Sie auch die Syntax => verwenden.
Hier ist ein Beispiel mit dynamisch erstellten Elementen:
Beachten Sie, dass jedes dynamisch erstellte Element einen eindeutigen Referenzschlüssel haben sollte.
Wenn Sie das eigentliche Datenobjekt (und nicht das Ereignis) an Ihre onClick-Funktion übergeben möchten, müssen Sie dies an Ihre Bindung übergeben. Beispielsweise:
Neue onClick-Funktion:
Übergabe des Datenobjekts:
quelle
bind
in JSX niemals Funktionen mit Pfeilen verwenden.Wie in der React- Dokumentation erwähnt, sind sie in Bezug auf die Ereignisbehandlung dem normalen HTML-Code ziemlich ähnlich, aber die Ereignisnamen in React verwenden camelcase, da sie nicht wirklich HTML sind, sondern JavaScript. Außerdem übergeben Sie die Funktion, während wir den Funktionsaufruf übergeben In einem String-Format für HTML sind sie unterschiedlich, aber die Konzepte sind ziemlich ähnlich ...
Schauen Sie sich das folgende Beispiel an und achten Sie darauf, wie das Ereignis an die Funktion übergeben wird:
quelle
quelle
@ user544079 Hoffe, diese Demo kann helfen :) Ich empfehle, die Hintergrundfarbe durch Umschalten des Klassennamens zu ändern.
quelle
quelle
Sie können die React.createClone-Methode verwenden. Erstellen Sie Ihr Element, und erstellen Sie dann einen Klon davon. Während der Erstellung des Klons können Sie Requisiten injizieren. Injizieren Sie eine solche onClick: -Methoden-Requisite
{ onClick : () => this.changeColor(originalElement, index) }
Die changeColor-Methode legt den Status mit dem Duplikat fest, sodass Sie die Farbe während des Vorgangs festlegen können.
quelle
Dies ist ein nicht standardmäßiges (aber nicht so ungewöhnliches) Reaktionsmuster, das kein JSX verwendet, sondern alles inline setzt. Es ist auch Coffeescript.
Der "Reaktionsweg", um dies zu tun, wäre mit dem eigenen Zustand der Komponente:
(
c = console.log.bind console
)Dieses Beispiel funktioniert - ich habe es lokal getestet. Sie können diesen Beispielcode genau bei meinem Github auschecken . Ursprünglich war das env nur für meine eigenen Whiteboard-Forschungs- und Entwicklungszwecke lokal, aber ich habe es dafür auf Github gepostet. Es wird möglicherweise irgendwann überschrieben, aber Sie können das Commit vom 8. September 2016 überprüfen, um dies zu sehen.
Allgemeiner gesagt , wenn Sie , wie diese CS / no-JSX Muster für React Werke sehen wollen Besuche einige neuere Arbeiten hier . Möglicherweise habe ich Zeit, einen POC für diese App-Idee vollständig zu implementieren. Der Stack enthält NodeJS, Primus, Redis und React.
quelle
do
Lambda sein: Dieser Ausdruck funktioniert auch:background: if @state.lighted_item is uid then 'magenta' else 'chartreuse'