【发布时间】:2021-01-21 12:06:33
【问题描述】:
我可以传递状态并且只使用 1 个函数而不是为每个状态属性调用一个函数吗?
组件状态:
this.state =
{
context: this.props.context,
dataProvider: this.props.dataProvider,
projectInformationDetails: {
programName: "",
projectName: "",
projectStatus: "",
projectStatusOptions: [],
appStatus: "",
appStatusOptions: [],
governanceStatus: "",
governanceStatusOptions: []
},
};
输入改变时改变状态的函数:
private async setProgramName(e) {
await this.setState(prevState => ({
projectInformationDetails: {
...prevState.projectInformationDetails,
programName: e.target.value,
}
}));
this.props.updateProjectItem(this.state.projectInformationDetails);
}
private async setProjectName(e) {
await this.setState(prevState => ({
projectInformationDetails: {
...prevState.projectInformationDetails,
projectName: e.target.value,
}
}));
this.props.updateProjectItem(this.state.projectInformationDetails);
}
...
渲染中的文本组件:
<TextField
label={strings.ProgramNameLabel}
defaultValue={this.state.projectInformationDetails.programName}
onChange={this.setProgramName}
/>
<TextField
label={strings.ProjectNameLabel}
defaultValue={this.state.projectInformationDetails.projectName}
onChange={this.setProjectName}
/>
...
因此,我不想为每个状态使用几乎相同的函数,而只想使用一个函数:
函数(状态,值)
如果我可以访问 projectInformationDetails 的属性而不克隆所有内容,也许代码会更简洁。
例如:
this.setState( {projectInformationDetails.programName: value});
【问题讨论】:
-
你实际上使用了 Same 函数,不清楚你在问什么,如果它的相同函数只是映射它。另外,为什么你
await换this.setState?这不是承诺 -
我强烈建议检查首选方式的 react hooks,并完全改变状态的处理方式
标签: javascript reactjs tsx