gpt4 book ai didi

javascript - react : updating parent state from nested children component

转载 作者:行者123 更新时间:2023-12-01 01:42:58 25 4
gpt4 key购买 nike

我正在使用 React 来处理表单。我的想法是创建一个可重用的 Form 组件,它从 Page 组件获取状态作为 props,并保存使用子数据更新其自身状态的逻辑,将其发送到父 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>
);
}
}

所以输入应该更新表单状态,表单应该更新页面状态。我知道当输入写入表单组件内部时如何传递回调,但我不知道当输入写入页面组件内部时如何执行此操作,就像在本例中一样。

我有一个沙盒供感兴趣的人使用:https://codesandbox.io/s/qx6kqypo09

最佳答案

class Input extends Component {


constructor(props) {
super(props);
}

handleChange(e) {
let data = this.props.this.state.data;
data.text1 = e.target.value;
this.props.this.setState({ data: data });
}

render() {
return (
<div className="Child" id={this.props.id}>
<div>Input component {this.props.id}</div>
<input
id={this.props.id}
type="text"
value={this.props.data}
onChange={e => this.handleChange(e)}
/>
</div>
);
}
}

使用指定的输入组件和如下所述的页面组件-

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" this={this} data={this.state.data.text1} />
<Input id="text2" data={this.state.data.text2} />
</Form>
</div>
);
}
}

我想这会对你有帮助谢谢

关于javascript - react : updating parent state from nested children component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52245531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com