İşte en iyi cevabı ve altındaki yorumları içeren eksiksiz bir çözüm (bu, birisinin hepsini bir araya getirmekte zorluk çekmesine yardımcı olabilir):
ES6 (2019) İÇİN GÜNCELLEME - ok işlevlerini ve nesne yok etmeyi kullanma
ana bileşende:
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} />
)
}
}
dahil bileşen (artık durum bilgisi olmayan bir işlevdir):
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>
)
ÖNCEKİ CEVAP (bağlama kullanarak):
ana bileşende:
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} />
)
}
}
dahil bileşen (artık durum bilgisi olmayan bir işlevdir):
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>
)
ana bileşen meyve için seçilen değeri korur (durumda), dahil edilen bileşen seçme öğesini görüntüler ve güncellemeler durumunu güncellemek için ana bileşene geri aktarılır (daha sonra seçilen değeri değiştirmek için dahil edilen bileşene geri döner).
Türlerine bakılmaksızın aynı formdaki diğer alanlar için tek bir handleChange yöntemi bildirmenize olanak tanıyan bir ad pervane kullanımına dikkat edin.