2 回答
TA贡献1815条经验 获得超6个赞
如果要使用子项上的值更新父项的状态,则必须将事件处理程序从父项传递到子项。如果要解析子项与其父项之间的通信,只需使用两个参数传递和事件处理程序:字段名称及其值。使用js,您可以使用点表示法和括号表示法调用字段。在这种情况下,您必须使用括号表示法,并将第一个参数作为参数传递,并作为值来存储第二个参数。
一些代码:
在应用组件中,渲染如下所示:
render() {
return (
<div className="App">
<Child data={this.state.object} clicked={this.updateValue} />
</div>
);
事件处理程序如下所示:
updateValue = (field, value) => {
let update = {};
update[field] = value;
this.setState({
...this.state,
object: {
...this.state.object,
update
}
});
};
这是什么意思?该方法要做的第一件事是创建一个包含更新的对象更新,然后它执行浅层复制,最后,更新对象将其与更新合并。
子组件中每个 Form.控件的代码如下所示:
<Form.Control
size="sm"
type="text"
defaultValue={this.props.data.data1}
onChange={(event) => this.props.clicked('data1', event.target.value)}
/>
TA贡献1824条经验 获得超5个赞
您可以根据变量设置 Form 组件的名称,并在事件处理程序中使用它,如下所示:
<Form.Control
name="data1"
size="sm"
type="text"
defaultValue={this.props.data.data1}
onChange={this.props.handleOnChange}
/>
处理程序类似于:
handleOnChange = (e) => {
this.setState({object: {...this.state.object, [e.target.name]: e.target.value}})
}
<Child data={this.state.object} handleOnChange={this.handleOnChange} />
添加回答
举报