reactjs - 学习者问题:如何将数据从一个类传递到另一个类
问题描述
我正在学习 spfx 开发。我正在创建一个包含几个不同类的表单,以了解它们如何相互交互和传递数据。
我有两个单独的课程。一个父类有一个提交按钮,它使用父状态提交到 SharePoint 列表。另一个类组件有它自己的一组状态和字段。我希望用户在子组件中输入的任何内容都可以被父类提交(!)。
这是我的提交功能:
private _onSubmit() {
this.setState({
FormStatus: 'Submitted',
SubmittedLblVis: true,
}, () => {
pnp.sp.web.lists.getByTitle("JobEvaluationItems").items.add({
JobTitle: this.state.JobTitle,
Faculty: this.state.Faculty,
Department: this.state.SelectedDept,
SubDepartment: this.state.SubDepartment,
DeptContactId: this.state.DeptContact,
FormStatus: this.state.FormStatus,
EvalType: this.state.EvalType,
JobTitReportTo: this.state.JobTitReportTo
}).then((iar: ItemAddResult) => {
let list = pnp.sp.web.lists.getByTitle("JobEvaluationItems");
list.items.getById(iar.data.Id).update({
JobRef: 'JE'+iar.data.Id
});
this.setState({
JobRef: iar.data.Id
});
});
});
}
这是子组件中的一个函数,它处理输入到字段中的任何内容:
private _onJobTitReportToChange = (ev: React.FormEvent<HTMLInputElement>, newValue?: string) => {
this.setState({
JobTitReportTo: newValue
});
}
我如何将上面的状态函数(保存在子组件中)传递给父组件?
解决方案
class Child extends React.Component {
state = {
childValue: 1
}
onChange = e => {
this.setState({childValue: e.target.value}, () => {
this.props.onChange(this.state);
})
}
render () {
return <input value={this.state.childValue} onChange={this.onChange} />
}
}
class Parent extends React.Component {
state = {
parentValue: 123,
dataFromChild: null
}
handleChildChange = childData => {
this.setState({dataFromChild: childData});
}
render () {
return (
<div>
<Child onChange={this.handleChildChange} />
<pre>{JSON.stringify(this.state, null, 2)}</pre>
</div>
)
}
}
ReactDOM.render(<Parent />, document.querySelector("#root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
在 React 世界中,有两种常用的数据传输方式:
- 如果您想将其传递给子组件 - 使用道具;
- 如果你想将它传递给父组件 - 使用回调;
还有另一种方式 - 上下文,但这是一个完全不同的故事。
推荐阅读
- flutter - 没有为类错误定义 Getter (Flutter)
- javascript - React:以多个按钮的形式检测哪个按钮
- python-3.x - Python命令行相当于许多过去命令的Bash“fc”编辑?
- r - 根据周对r中的数据框进行排序
- swift - 分支链接未在应用程序中捕获数据,仅在通过 safari 浏览器打开时才有效
- excel - 对不同文件夹中的文件使用 application.pathseparator
- python - Python多处理starmap_async没有终止?
- javascript - React.js - 子组件道具未定义
- c++ - 如何在同一个类中同时使用成员函数和友元函数运算符重载
- vue.js - 将自定义 css 添加到 vue 构建库