Я работаю в форме с React. Моя идея состоит в том, чтобы создать повторно используемый компонент Form, который получает состояние от компонента Page в качестве реквизитов и будет содержать логику для обновления своего собственного состояния с помощью дочерних данных, отправляя его в родительский компонент Page.
Компонент Page это так:
class Page extends Component {
constructor(props) {
super(props);
this.state = {
data: {
text1: "Initial text1",
text2: "Initial text2"
}
};
}
render() {
return (
<div className="Page">
<div className="DataPreview">
Data preview in Page component
<div>{this.state.data.text1}</div>
<div>{this.state.data.text2}</div>
</div>
<Form data={this.state.data}>
<Input id="text1" data={this.state.data.text1} />
<Input id="text2" data={this.state.data.text2} />
</Form>
</div>
);
}
}
Это компонент формы:
class Form extends Component {
constructor(props) {
super(props);
this.state = this.props.data;
}
render() {
return (
<div className="Parent">
<div>Form component</div>
<div className="DataPreview">
Data preview in Form component
<div>{this.state.text1}</div>
<div>{this.state.text2}</div>
</div>
{this.props.children}
</div>
);
}
}
А это входной компонент:
class Input extends Component {
constructor(props) {
super(props);
}
render() {
return (
<div className="Child" id={this.props.id}>
<div>Input component</div>
<input id={this.props.id} type="text" value={this.props.data} />
</div>
);
}
}
Таким образом, ввод должен обновлять состояние формы, а форма должна обновлять состояние страницы. Я знаю, как сделать это, передавая обратный вызов, когда ввод написан внутри компонента Form, но я не могу понять, как это сделать, когда он написан внутри компонента Page, как в этом случае.
У меня есть песочница для интересующихся: https://codesandbox.io/s/qx6kqypo09