Hier ist eine vollständige Lösung, die die beste Antwort und die Kommentare darunter enthält (was jemandem helfen könnte, der Schwierigkeiten hat, alles zusammenzusetzen):
UPDATE FOR ES6 (2019) - Verwenden von Pfeilfunktionen und Objektzerstörung
in der Hauptkomponente:
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} />
)
}
}
enthaltene Komponente (die jetzt eine zustandslose Funktion ist):
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>
)
VORHERIGE ANTWORT (mit bind):
in der Hauptkomponente:
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} />
)
}
}
enthaltene Komponente (die jetzt eine zustandslose Funktion ist):
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>
)
Die Hauptkomponente behält den ausgewählten Wert für Obst bei (im Status), die enthaltene Komponente zeigt das Auswahlelement an und Aktualisierungen werden an die Hauptkomponente zurückgegeben, um ihren Status zu aktualisieren (die dann zur eingeschlossenen Komponente zurückkehrt, um den ausgewählten Wert zu ändern).
Beachten Sie die Verwendung einer Namensstütze, mit der Sie unabhängig von ihrem Typ eine einzelne handleChange-Methode für andere Felder im selben Formular deklarieren können.