mam
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);
Chcę pokolorować tło klikniętego elementu listy. Jak mogę to zrobić w React?
Coś jak
$('li').on('click', function(){
$(this).css({'background-color': '#ccc'});
});
javascript
jquery
reactjs
user544079
źródło
źródło
event.currentTarget.style.backgroundColor = '#ccc';
chyba, że naprawdę rozumiesz, co robisz (w większości przypadków podczas integracji widżetów innych firm).Myślę o dwóch sposobach
To mój ulubiony.
Oto DEMO
Mam nadzieję, że to pomoże.
źródło
.bind
nie przyjmuje dodatkowego parametru. Ale w pierwszym przypadku tak. Myślę, że nie ma innego sposobuOto jak definiujesz procedurę obsługi zdarzeniareakcji onClick , która odpowiadała na tytuł pytania ... używając składni es6
źródło
bind
należy używać funkcji ani funkcji strzałkowych,render
ponieważ powodują one za każdym razem tworzenie nowej funkcji. Skutkuje to zmianą stanu komponentu, a komponenty o zmienionym stanie są zawsze renderowane ponownie. Dla singlaa
to nic wielkiego. W przypadku generowanych list z klikalnymi elementami staje się to bardzo szybko. Dlatego jest specjalnie ostrzegany przed.Użyj ECMA2015. Funkcje strzałek sprawiają, że „to” jest dużo bardziej intuicyjne.
źródło
index
nic tu nie robi?Jeśli używasz ES6, oto prosty przykładowy kod:
W treściach klas ES6 funkcje nie wymagają już słowa kluczowego „function” i nie muszą być oddzielane przecinkami. Jeśli chcesz, możesz również użyć składni =>.
Oto przykład z dynamicznie tworzonymi elementami:
Należy pamiętać, że każdy dynamicznie utworzony element powinien mieć unikalny „klucz” odniesienia.
Ponadto, jeśli chcesz przekazać rzeczywisty obiekt danych (zamiast zdarzenia) do swojej funkcji onClick, będziesz musiał przekazać to do swojego bind. Na przykład:
Nowa funkcja onClick:
Przekazywanie obiektu danych:
źródło
bind
funkcji ani strzałek w JSX.Tak więc, jak wspomniano w dokumentacji Reacta , są one dość podobne do normalnego HTML, jeśli chodzi o obsługę zdarzeń, ale nazwy zdarzeń w Reakcie przy użyciu camelcase, ponieważ nie są tak naprawdę HTML, są JavaScript, również przekazujesz funkcję, gdy przekazujemy wywołanie funkcji w formacie string dla HTML są różne, ale koncepcje są dość podobne ...
Spójrz na poniższy przykład, zwróć uwagę na sposób przekazywania zdarzenia do funkcji:
źródło
źródło
@ user544079 Mam nadzieję, że to demo może pomóc :) Polecam zmianę koloru tła poprzez przełączenie nazwy klasy.
źródło
źródło
Możesz skorzystać z metody React.createClone. Stwórz swój element, niż stwórz jego klon. Podczas tworzenia klona możesz wstrzykiwać rekwizyty. Wstaw atrybut metody onClick: w ten sposób
{ onClick : () => this.changeColor(originalElement, index) }
metoda changeColor ustawi stan z duplikatem, umożliwiając ustawienie koloru w procesie.
źródło
Jest to niestandardowy (ale nie tak rzadki) wzorzec React, który nie używa JSX, zamiast tego umieszcza wszystko w linii. Poza tym to Coffeescript.
Aby to zrobić, należy użyć własnego stanu komponentu:
(
c = console.log.bind console
)Ten przykład działa - przetestowałem go lokalnie. Możesz sprawdzić ten przykładowy kod dokładnie na moim githubie . Początkowo środowisko env było lokalne tylko dla moich własnych celów badawczo-rozwojowych, ale w tym celu opublikowałem je na Github. W pewnym momencie może zostać napisane, ale możesz sprawdzić zatwierdzenie z 8 września 2016, aby to zobaczyć.
Mówiąc bardziej ogólnie, jeśli chcesz zobaczyć, jak działa ten wzorzec CS / no-JSX dla Reacta, zapoznaj się z ostatnimi pracami tutaj . Możliwe, że będę miał czas na pełne wdrożenie POC dla tego pomysłu na aplikację, w skład którego wchodzą NodeJS, Primus, Redis i React.
źródło
do
lambdą: To wyrażenie działa również:background: if @state.lighted_item is uid then 'magenta' else 'chartreuse'