Jeśli używasz ES6, oto prosty przykładowy kod:
import React from 'wherever_react_is';
class TestApp extends React.Component {
getComponent(event) {
console.log('li item clicked!');
event.currentTarget.style.backgroundColor = '#ccc';
}
render() {
return(
<div>
<ul>
<li onClick={this.getComponent.bind(this)}>Component 1</li>
</ul>
</div>
);
}
}
export default TestApp;
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:
import React from 'wherever_react_is';
class TestApp extends React.Component {
constructor(props) {
super(props);
this.state = {
data: [
{name: 'Name 1', id: 123},
{name: 'Name 2', id: 456}
]
}
}
getComponent(event) {
console.log('li item clicked!');
event.currentTarget.style.backgroundColor = '#ccc';
}
render() {
<div>
<ul>
{this.state.data.map(d => {
return(
<li key={d.id} onClick={this.getComponent.bind(this)}>{d.name}</li>
)}
)}
</ul>
</div>
);
}
}
export default TestApp;
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:
getComponent(object) {
console.log(object.name);
}
Przekazywanie obiektu danych:
{this.state.data.map(d => {
return(
<li key={d.id} onClick={this.getComponent.bind(this, d)}>{d.name}</li>
)}
)}
event.currentTarget.style.backgroundColor = '#ccc';chyba, że naprawdę rozumiesz, co robisz (w większości przypadków podczas integracji widżetów innych firm).