Voici une solution complète qui incorpore la meilleure réponse et les commentaires ci-dessous (qui pourraient aider quelqu'un qui a du mal à tout reconstituer):
MISE À JOUR POUR ES6 (2019) - Utilisation des fonctions fléchées et de la déstructuration d'objets
dans le composant principal:
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} />
)
}
}
composant inclus (qui est maintenant une fonction sans état):
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>
)
RÉPONSE PRÉCÉDENTE (à l'aide de bind):
dans le composant principal:
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} />
)
}
}
composant inclus (qui est maintenant une fonction sans état):
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>
)
le composant principal conserve la valeur sélectionnée pour les fruits (en état), le composant inclus affiche l'élément sélectionné et les mises à jour sont retransmises au composant principal pour mettre à jour son état (qui revient ensuite au composant inclus pour modifier la valeur sélectionnée).
Notez l'utilisation d'un accessoire de nom qui vous permet de déclarer une seule méthode handleChange pour les autres champs du même formulaire, quel que soit leur type.