Đây là một giải pháp hoàn chỉnh kết hợp câu trả lời tốt nhất và các bình luận bên dưới nó (có thể giúp ai đó đấu tranh để ghép tất cả lại với nhau):
CẬP NHẬT CHO ES6 (2019) - sử dụng các hàm mũi tên và phá hủy đối tượng
trong thành phần chính:
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} />
)
}
}
bao gồm thành phần (hiện là chức năng không trạng thái):
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>
)
TRẢ LỜI TRƯỚC (sử dụng liên kết):
trong thành phần chính:
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} />
)
}
}
bao gồm thành phần (hiện là chức năng không trạng thái):
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>
)
thành phần chính duy trì giá trị được chọn cho trái cây (ở trạng thái), thành phần đi kèm hiển thị phần tử được chọn và các bản cập nhật được chuyển trở lại thành phần chính để cập nhật trạng thái của nó (sau đó lặp lại thành phần được bao gồm để thay đổi giá trị đã chọn).
Lưu ý việc sử dụng tên prop cho phép bạn khai báo một phương thức handleChange duy nhất cho các trường khác trên cùng một hình thức bất kể loại của chúng.