Réagir JS gestionnaire d'événement onClick
J'ai
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);
Je veux de la couleur de l'arrière-plan de l'cliqué sur un élément de liste. Comment puis-je le faire de Réagir ?
Quelque chose comme
$('li').on('click', function(){
$(this).css({'background-color': '#ccc'});
});
- Comment sur le marquage d'une réponse?
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas simplement:
Et si vous voulez être plus Réagir-ive à ce sujet, vous pouvez définir l'élément sélectionné comme l'état de son contenant Réagir composant, puis de référence de l'état pour déterminer l'élément de couleur à l'intérieur de
render
:Bien sûr, vous voulez mettre ces
<li>
s dans une boucle, et vous avez besoin de faire leli.on
etli.off
styles de jeu de votrebackground-color
.Deux façons que je peux penser sont
C'est mon favori personnel.
Ici est un DÉMO
J'espère que cette aide.
.bind
ne prend pas un paramètre supplémentaire. Mais dans le premier cas, il n'. Je ne pense pas qu'il y est un autre moyenIci est de savoir comment vous définissez un réagir gestionnaire d'événements onClick, qui était de répondre à la question du titre... à l'aide de es6 syntaxe
bind
ni flèche fonctions doivent être utilisés dans lesrender
méthodes, car elles traduisent une nouvelle fonction créée à chaque fois. Cela a pour effet de changer l'état du composant, et des composants de changé d'état sont toujours re-rendus. Pour un seula
ce n'est pas une grosse affaire. Pour les listes générées avec des éléments cliquables cela devient une affaire très rapidement. C'est pourquoi il est expressément mis en garde contre.Utilisation ECMA2015. Flèche fonctions "ce" beaucoup plus intuitif.
index
ne pas faire quelque chose ici?Si vous utilisez ES6, voici un exemple simple de code:
Dans l'ES6 classe d'organes, fonctions de ne plus exiger la "fonction" mot-clé et ils n'ont pas besoin d'être séparés par des virgules. Vous pouvez également utiliser l' => syntaxe ainsi si vous le souhaitez.
Voici un exemple avec une de créer dynamiquement des éléments:
Noter que chaque créés dynamiquement élément doit avoir une référence unique "clé".
En outre, si vous souhaitez transmettre les données réelles de l'objet (plutôt que l'événement) dans votre onClick fonction, vous aurez besoin de passer que dans votre lier. Par exemple:
Nouvelle fonction onClick:
Passage dans l'objet de données:
bind
fléchées ou fonctions dans JSX.Donc, comme mentionné dans Réagir de la documentation, ils ont tout à fait similaire à HTML normal quand il s'agit de la gestion des Événements, mais les noms des événements dans Réagissent à l'aide de camelcase, parce qu'ils ne sont pas vraiment en HTML, ils sont JavaScript, aussi, vous passez à la fonction tout en nous passant des appels de fonction dans une chaîne de caractères au format HTML, ils sont différents, mais les concepts sont assez similaires...
Regardez l'exemple ci-dessous, faites attention à la façon dont l'événement se passait à la fonction:
JS:
Vous pouvez faire usage de la Réaction.createClone méthode. Créez votre élément, que de créer un clone de lui. Pendant le clone de la création, vous pouvez injecter des accessoires. Injecter un onClick : méthode prop comme ce
{ onClick : () => this.changeColor(originalElement, index) }
la méthode changeColor permettra de définir l'état avec le double, vous permettant de vous sto définir la couleur dans le processus.
JS:
S'il vous plaît commentaire si vous downvote. C'est un non-standard (mais pas si rare) de Réagir modèle qui n'utilise pas JSX, au lieu de tout mettre en ligne. Aussi, il est Coffeescript.
Le "Réagir simple" à faire, ce serait avec le composant de l'état:
(
c = console.log.bind console
)Cet exemple fonctionne, je l'ai testé en local.
Vous pouvez vérifier cet exemple de code exactement à mon github.
À l'origine de l'env est seulement pour mon propre tableau de r&d, mais je l'ai posté à Github pour cela. Il peuvent être écrites sur à un certain moment, mais vous pouvez consulter le commis depuis le 8 Septembre 2016 voir.
Plus généralement, si vous voulez voir comment cela CS/non-JSX modèle pour Réagir œuvres, découvrez quelques-uns des travaux récents ici. Il est possible que j'aurai le temps de mettre pleinement en œuvre d'un POC pour cette conception de l'application, la pile pour qui comprend NodeJS, Primus, Redis, & Réagir.
do
lambda: Cette expression fonctionne aussi:background: if @state.lighted_item is uid then 'magenta' else 'chartreuse'
c = console.log.bind console