【发布时间】:2020-04-20 19:41:57
【问题描述】:
如何在 React 组件中动态设置和存在状态字段?
我目前的尝试导致以下方法,但它在 TypeScript 中不起作用:
export interface MaskCompanyDetailState {
fieldId: number;
}
export class MaskCompanyDetail extends React.Component<MaskCompanyDetailProps, MaskCompanyDetailState> {
public constructor(props: any) {
super(props);
// Set field defaults.
this.state = {
fieldId: 0,
};
}
public componentDidMount() {
const myField: string = 'fieldId';
const myVal: number = 123;
this.setState({[myField]: myVal});
this.setState({myField: myVal});
}
}
来自 TSLint 的 this.setState({[myField]: myVal}); 的错误消息:
类型参数 '{ [x: string]: number; }' 不可分配给“MaskCompanyDetailState |”类型的参数((prevState: Readonly, props: Readonly) => MaskCompanyDetailState | Pick<...>) |选择<...>'。 输入 '{ [x: string]: number; }' 缺少“Pick”类型的以下属性:fieldId、fieldCompanyName、fieldStreetName、fieldStreetNumber 和 4 个以上。ts(2345)
来自 TSLint 的 this.setState({myField: myVal}); 的错误消息:
类型参数 '{ myField: number; }' 不可分配给“MaskCompanyDetailState |”类型的参数((prevState: Readonly, props: Readonly) => MaskCompanyDetailState | Pick<...>) |选择<...>'。 对象字面量只能指定已知属性,并且“myField”类型不存在于“MaskCompanyDetailState | ((prevState: Readonly, props: Readonly) => MaskCompanyDetailState | Pick<...>) |选择<...>'.ts(2345)
已经有帖子here了,但是我不知道如何应用建议的IState接口。
【问题讨论】:
-
您想为对象添加属性吗?或者你想使用
myField变量的值来动态设置属性名? -
为什么
myField键周围有引号?有点违背了计算属性的要点,{['myField']: 123}与{myField: 123}相同,我认为这不是您想要做的,我猜myField是一个变量,在这种情况下它应该是{[myField]: 123} -
我已通过指定初始问题并提供更多代码来更新帖子。
-
切向相关:“TSLint”指的是现已弃用的单独工具。您可能指的是“TypeScript”。
标签: reactjs typescript state tslint