ES6を使用している場合、簡単なコード例を以下に示します。
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;
ES6クラス本体では、関数は 'function'キーワードを必要とせず、コンマで区切る必要はありません。必要に応じて=>構文も使用できます。
動的に作成された要素の例を次に示します。
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;
動的に作成された各要素には、一意の参照「キー」が必要です。
さらに、(イベントではなく)実際のデータオブジェクトをonClick関数に渡したい場合は、それをバインドに渡す必要があります。例えば:
新しいonClick関数:
getComponent(object) {
console.log(object.name);
}
データオブジェクトを渡す:
{this.state.data.map(d => {
return(
<li key={d.id} onClick={this.getComponent.bind(this, d)}>{d.name}</li>
)}
)}
event.currentTarget.style.backgroundColor = '#ccc';
あなたが何をしているのか本当に理解していない限り(ほとんどの場合、サードパーティのウィジェットを統合している間)のようなことは避けてください。