여기에 최고의 답변과 그 아래의 주석이 통합 된 완벽한 솔루션이 있습니다 (누군가가 그것을 모두 모으기 위해 고군분투하는 데 도움이 될 수 있음).
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>
)
기본 구성 요소는 과일에 대해 선택된 값을 유지하고 (상태) 포함 된 구성 요소는 선택 요소를 표시하고 업데이트는 기본 구성 요소로 다시 전달되어 상태를 업데이트합니다 (선택한 값을 변경하기 위해 포함 된 구성 요소로 루프백 됨).
이름 소품을 사용하면 유형에 관계없이 동일한 양식의 다른 필드에 대해 단일 handleChange 메소드를 선언 할 수 있습니다.