eu tenho
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);
Quero colorir o fundo do elemento da lista clicado. Como posso fazer isso no React?
Algo como
$('li').on('click', function(){
$(this).css({'background-color': '#ccc'});
});
javascript
jquery
reactjs
user544079
fonte
fonte
event.currentTarget.style.backgroundColor = '#ccc';
menos que você realmente entenda o que está fazendo (na maioria das vezes, ao integrar widgets de terceiros).Duas maneiras que posso pensar são
Este é meu favorito pessoal.
Aqui está uma DEMO
Eu espero que isso ajude.
fonte
.bind
não usar um parâmetro extra. Mas no primeiro caso, sim. Não acho que haja outra maneiraAqui está como você define um manipulador de eventos react onClick , que estava respondendo ao título da pergunta ... usando a sintaxe es6
fonte
bind
as funções de seta nem devem ser usadas nosrender
métodos porque elas resultam na criação de uma nova função a cada vez. Isso tem o efeito de alterar o estado do componente, e os componentes com estado alterado são sempre renderizados novamente. Para um único,a
isso não é grande coisa. Para listas geradas com itens clicáveis, isso se torna um grande negócio muito rapidamente. É por isso que é especificamente advertido.Use ECMA2015. As funções das setas tornam "isto" muito mais intuitivo.
fonte
index
não faz nada aqui?Se você estiver usando ES6, aqui está um código de exemplo simples:
Em corpos de classe ES6, as funções não requerem mais a palavra-chave 'function' e não precisam ser separadas por vírgulas. Você também pode usar a sintaxe => se desejar.
Aqui está um exemplo com elementos criados dinamicamente:
Observe que cada elemento criado dinamicamente deve ter uma 'chave' de referência exclusiva.
Além disso, se desejar passar o objeto de dados real (em vez do evento) para a função onClick, você precisará passá-lo para o bind. Por exemplo:
Nova função onClick:
Passando o objeto de dados:
fonte
bind
as funções de seta ou no JSX.Como mencionado na documentação do React , eles são bastante semelhantes ao HTML normal quando se trata de manipulação de eventos, mas os nomes dos eventos no React usando camelcase, porque eles não são realmente HTML, são JavaScript, também, você passa a função enquanto passamos a chamada de função em formato de string para HTML, eles são diferentes, mas os conceitos são muito semelhantes ...
Veja o exemplo abaixo, preste atenção na maneira como o evento é passado para a função:
fonte
fonte
@ user544079 Espero que esta demonstração possa ajudar :) Eu recomendo alterar a cor do plano de fundo alternando o nome da classe.
fonte
fonte
Você pode usar o método React.createClone. Crie seu elemento, em seguida, crie um clone dele. Durante a criação do clone, você pode injetar adereços. Injetar um onClick: método prop como este
{ onClick : () => this.changeColor(originalElement, index) }
o método changeColor definirá o estado com a duplicata, permitindo que você defina a cor no processo.
fonte
Este é um padrão React não padrão (mas não tão incomum) que não usa JSX, em vez disso, coloca tudo embutido. Além disso, é Coffeescript.
O 'React-way' para fazer isso seria com o próprio estado do componente:
(
c = console.log.bind console
)Este exemplo funciona - eu testei localmente. Você pode verificar este código de exemplo exatamente no meu github . Originalmente, o env era apenas local para meus propósitos de pesquisa e desenvolvimento de quadro branco, mas eu o postei no Github para isso. Pode ser substituído em algum momento, mas você pode conferir o commit de 8 de setembro de 2016 para ver isso.
De forma mais geral, se você quiser ver como funciona esse padrão CS / no-JSX para React, verifique alguns trabalhos recentes aqui . É possível que eu tenha tempo para implementar totalmente um POC para esta ideia de aplicativo, cuja pilha inclui NodeJS, Primus, Redis e React.
fonte
do
lambda: Esta expressão também funciona:background: if @state.lighted_item is uid then 'magenta' else 'chartreuse'