Ось повне рішення, яке містить найкращу відповідь та коментарі під нею (що може допомогти комусь, хто бореться зібрати все це разом):
ОНОВЛЕННЯ ДЛЯ 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>
)
основний компонент підтримує вибране значення для фруктів (у стані), включений компонент відображає вибраний елемент, а оновлення передаються до основного компонента для оновлення його стану (який потім цикли повертаються на включений компонент для зміни вибраного значення).
Зверніть увагу на використання імені підпорядкування, яке дозволяє оголосити метод єдиної ручки зміни для інших полів у тій же формі незалежно від їх типу.