หากคุณใช้ 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';
เว้นแต่คุณจะเข้าใจจริงๆว่าคุณกำลังทำอะไรอยู่ (ส่วนใหญ่ในขณะที่ผสานรวมวิดเจ็ตของบุคคลที่สาม)