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 souhaite colorer l'arrière-plan de l'élément de liste cliqué. Comment puis-je faire cela dans React?
Quelque chose comme
$('li').on('click', function(){
$(this).css({'background-color': '#ccc'});
});
javascript
jquery
reactjs
user544079
la source
la source
event.currentTarget.style.backgroundColor = '#ccc';
si vous ne comprenez pas vraiment ce que vous faites (la plupart du temps, tout en intégrant des widgets tiers).Deux façons dont je peux penser sont
Ceci est mon préféré.
Voici une DEMO
J'espère que ça aide.
la source
.bind
ne prend pas de paramètre supplémentaire. Mais dans le premier cas, c'est le cas. Je ne pense pas qu'il y ait un autre moyenVoici comment définir un gestionnaire d'événements react onClick , qui répondait au titre de la question ... en utilisant la syntaxe es6
la source
bind
fonctions fléchées ne doivent être utilisées dans lesrender
méthodes car elles entraînent la création d'une nouvelle fonction à chaque fois. Cela a pour effet de changer l'état du composant et les composants dont l'état a changé sont toujours rendus. Pour un célibataire,a
ce n'est pas grave. Pour les listes générées avec des éléments cliquables, cela devient très rapidement un gros problème. C'est pourquoi il est spécifiquement mis en garde contre.Utilisez ECMA2015. Les fonctions fléchées rendent "ceci" beaucoup plus intuitif.
la source
index
ne fait rien ici?Si vous utilisez ES6, voici un exemple de code simple:
Dans les corps de classe ES6, les fonctions n'ont plus besoin du mot-clé 'function' et elles n'ont pas besoin d'être séparées par des virgules. Vous pouvez également utiliser la syntaxe => si vous le souhaitez.
Voici un exemple avec des éléments créés dynamiquement:
Notez que chaque élément créé dynamiquement doit avoir une «clé» de référence unique.
De plus, si vous souhaitez passer l'objet de données réel (plutôt que l'événement) dans votre fonction onClick, vous devrez le transmettre dans votre liaison. Par exemple:
Nouvelle fonction onClick:
Passer l'objet de données:
la source
bind
fonctions fléchées ou dans JSX.Donc, comme mentionné dans la documentation React , ils sont assez similaires au HTML normal en ce qui concerne la gestion des événements, mais les noms d'événements dans React utilisant camelcase, car ils ne sont pas vraiment HTML, ils sont JavaScript, aussi, vous passez la fonction pendant que nous passons l'appel de fonction dans un format de chaîne pour 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 est passé à la fonction:
la source
la source
@ user544079 J'espère que cette démo pourra vous aider :) Je recommande de changer la couleur d'arrière-plan en basculant le nom de classe.
la source
la source
Vous pouvez utiliser la méthode React.createClone. Créez votre élément, puis créez-en un clone. Lors de la création du clone, vous pouvez injecter des accessoires. Injectez un accessoire onClick: method comme celui-ci
{ onClick : () => this.changeColor(originalElement, index) }
la méthode changeColor définira l'état avec le duplicata, vous permettant de définir la couleur dans le processus.
la source
Il s'agit d'un modèle React non standard (mais pas si rare) qui n'utilise pas JSX, mais qui met tout en ligne. De plus, c'est Coffeescript.
Le 'React-way' pour faire cela serait avec le propre état du composant:
(
c = console.log.bind console
)Cet exemple fonctionne - je l'ai testé localement. Vous pouvez consulter cet exemple de code exactement sur mon github . À l'origine, l'environnement n'était local que pour mes propres besoins de recherche et de développement sur le tableau blanc, mais je l'ai posté sur Github pour cela. Il peut être réécrit à un moment donné, mais vous pouvez consulter le commit du 8 septembre 2016 pour le voir.
Plus généralement, si vous voulez voir comment fonctionne ce modèle CS / no-JSX pour React, consultez quelques travaux récents ici . Il est possible que j'aie le temps de mettre pleinement en œuvre un POC pour cette idée d'application, dont la pile comprend NodeJS, Primus, Redis et React.
la source
do
lambda: Cette expression fonctionne aussi:background: if @state.lighted_item is uid then 'magenta' else 'chartreuse'