【发布时间】:2020-05-01 09:30:49
【问题描述】:
我想在条件更新列表的末尾更新状态并累积要立即提交的更改(以避免 setState 出现异步问题)。
interface IMyComponentState {
a: string;
b: string;
c: string;
}
(...)
updateState = (condition1: boolean, condition2: boolean) => {
const stateChanges: Partial<IMyComponentState> = {};
if (condition1) {
stateChanges.a = 'someValue 1';
}
if (condition2) {
stateChanges.b = 'someValue 2';
}
this.setState(
{ ...this.state, ...stateChanges },
() => this.doSomethingThatDependsOnState()
);
}
这很好用,但有没有办法不使用this.state,如下所示?
this.setState(
{...stateChanges},
(...)
);
这里tslint 抱怨setState 需要Pick<IMyComponentState, "a" | "b" | "c"> 类型的对象,但这需要我提前指定(并预测)要更改的属性,这是不可能的。我听说 React 的 diffing 算法会检查引用,但我仍然担心将整个 state 对象放入 setState 会增加额外的开销或者是不必要的。
【问题讨论】:
标签: reactjs typescript setstate tslint