ต่อไปนี้เป็นคำตอบที่สมบูรณ์ซึ่งรวมคำตอบที่ดีที่สุดและความคิดเห็นไว้ด้านล่าง (ซึ่งอาจช่วยให้ใครบางคนพยายามรวมเข้าด้วยกัน)
อัพเดตสำหรับ ES6 (2019) - การใช้ฟังก์ชั่นลูกศรและการทำลายวัตถุ
ในองค์ประกอบหลัก:
class ReactMain extends React.Component {
constructor(props) {
super(props);
this.state = { fruit: props.item.fruit };
}
handleChange = (event) => {
this.setState({ [event.target.name]: event.target.value });
}
saveItem = () => {
const item = {};
item.fruit = this.state.fruit;
// do more with item object as required (e.g. save to database)
}
render() {
return (
<ReactExample name="fruit" value={this.state.fruit} handleChange={this.handleChange} />
)
}
}
ส่วนประกอบที่รวมอยู่ (ซึ่งขณะนี้เป็นฟังก์ชันไร้สัญชาติ):
export const ReactExample = ({ name, value, handleChange }) => (
<select name={name} value={value} onChange={handleChange}>
<option value="A">Apple</option>
<option value="B">Banana</option>
<option value="C">Cranberry</option>
</select>
)
คำตอบก่อนหน้า (ใช้การผูก):
ในองค์ประกอบหลัก:
class ReactMain extends React.Component {
constructor(props) {
super(props);
// bind once here, better than multiple times in render
this.handleChange = this.handleChange.bind(this);
this.state = { fruit: props.item.fruit };
}
handleChange(event) {
this.setState({ [event.target.name]: event.target.value });
}
saveItem() {
const item = {};
item.fruit = this.state.fruit;
// do more with item object as required (e.g. save to database)
}
render() {
return (
<ReactExample name="fruit" value={this.state.fruit} handleChange={this.handleChange} />
)
}
}
ส่วนประกอบที่รวมอยู่ (ซึ่งขณะนี้เป็นฟังก์ชันไร้สัญชาติ):
export const ReactExample = (props) => (
<select name={props.name} value={props.value} onChange={props.handleChange}>
<option value="A">Apple</option>
<option value="B">Banana</option>
<option value="C">Cranberry</option>
</select>
)
องค์ประกอบหลักรักษาค่าที่เลือกสำหรับผลไม้ (ในสถานะ) ส่วนประกอบที่รวมจะแสดงองค์ประกอบที่เลือกและการอัปเดตจะถูกส่งกลับไปยังองค์ประกอบหลักเพื่ออัปเดตสถานะของมัน (ซึ่งจะวนกลับไปที่องค์ประกอบที่รวมไว้เพื่อเปลี่ยนค่าที่เลือก)
หมายเหตุการใช้ชื่อ prop ซึ่งช่วยให้คุณประกาศวิธีการ handleChange เดียวสำหรับเขตข้อมูลอื่น ๆ ในรูปแบบเดียวกันโดยไม่คำนึงถึงชนิดของพวกเขา