yo tengo
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);
Quiero colorear el fondo del elemento de la lista en el que se hizo clic. ¿Cómo puedo hacer esto en React?
Algo como
$('li').on('click', function(){
$(this).css({'background-color': '#ccc'});
});
javascript
jquery
reactjs
usuario544079
fuente
fuente
event.currentTarget.style.backgroundColor = '#ccc';
menos que realmente comprenda lo que está haciendo (la mayoría de las veces, mientras integra widgets de terceros).Dos formas en las que puedo pensar son
Este es mi favorito personal.
Aquí hay una DEMO
Espero que esto ayude.
fuente
.bind
no toma un parámetro adicional. Pero en el primer caso lo hace. No creo que haya otra maneraAsí es como se define un controlador de eventos react onClick , que respondía al título de la pregunta ... usando la sintaxis es6
fuente
bind
las funciones de flecha ni deben usarse dentro de losrender
métodos porque dan como resultado la creación de una nueva función cada vez. Esto tiene el efecto de cambiar el estado del componente, y los componentes con estado cambiado siempre se vuelven a renderizar. Para uno soloa
esto no es gran cosa. Para las listas generadas con elementos en los que se puede hacer clic, esto se convierte en un gran problema muy rápidamente. Es por eso que se advierte específicamente contra esto.Utilice ECMA2015. Las funciones de flecha hacen que "esto" sea mucho más intuitivo.
fuente
index
no hace nada aqui?Si está utilizando ES6, aquí hay un código de ejemplo simple:
En los cuerpos de clase de ES6, las funciones ya no requieren la palabra clave 'función' y no necesitan estar separadas por comas. También puede usar la sintaxis => si lo desea.
Aquí tienes un ejemplo con elementos creados dinámicamente:
Tenga en cuenta que cada elemento creado dinámicamente debe tener una 'clave' de referencia única.
Además, si desea pasar el objeto de datos real (en lugar del evento) a su función onClick, deberá pasarlo a su enlace. Por ejemplo:
Nueva función onClick:
Pasando el objeto de datos:
fuente
bind
las funciones de flecha o en JSX.Entonces, como se menciona en la documentación de React , son bastante similares al HTML normal cuando se trata de Manejo de eventos, pero los nombres de eventos en React usando camelcase, porque no son realmente HTML, son JavaScript, además, pasas la función mientras pasamos la llamada a la función en un formato de cadena para HTML, son diferentes, pero los conceptos son bastante similares ...
Mire el ejemplo a continuación, preste atención a la forma en que el evento se pasa a la función:
fuente
fuente
@ user544079 Espero que esta demostración pueda ayudar :) Recomiendo cambiar el color de fondo alternando el nombre de la clase.
fuente
fuente
Puede hacer uso del método React.createClone. Crea tu elemento, luego crea un clon de él. Durante la creación del clon, puedes inyectar accesorios. Inyectar un método onClick: prop como este
{ onClick : () => this.changeColor(originalElement, index) }
el método changeColor establecerá el estado con el duplicado, lo que le permitirá dejar de establecer el color en el proceso.
fuente
Este es un patrón React no estándar (pero no tan infrecuente) que no usa JSX, sino que pone todo en línea. Además, es Coffeescript.
La 'forma de reacción' para hacer esto sería con el propio estado del componente:
(
c = console.log.bind console
)Este ejemplo funciona, lo probé localmente. Puede consultar este código de ejemplo exactamente en mi github . Originalmente, el env era solo local para mis propios fines de I + D de pizarra, pero lo publiqué en Github para esto. Es posible que se escriba en algún momento, pero puede consultar el compromiso del 8 de septiembre de 2016 para ver esto.
De manera más general, si desea ver cómo funciona este patrón CS / no-JSX para React, consulte algunos trabajos recientes aquí . Es posible que tenga tiempo para implementar completamente un POC para esta idea de aplicación, cuya pila incluye NodeJS, Primus, Redis y React.
fuente
do
lambda: esta expresión también funciona:background: if @state.lighted_item is uid then 'magenta' else 'chartreuse'