Reactjs 反应+;TypeScript-如何使用带“的单个对象更新状态”;“动态”;一系列变化
我想在条件更新列表的末尾更新状态,并累积要立即提交的更改(以避免setState出现异步问题)Reactjs 反应+;TypeScript-如何使用带“的单个对象更新状态”;“动态”;一系列变化,reactjs,typescript,setstate,tslint,Reactjs,Typescript,Setstate,Tslint,我想在条件更新列表的末尾更新状态,并累积要立即提交的更改(以避免setState出现异步问题) 这里tslint抱怨setState需要类型为Pick的对象,但这需要我提前指定(并预测)要更改的属性,这是不可能的。我听说React的diffing算法检查引用,但我仍然担心将整个state对象放入setState会增加额外的开销,或者是不必要的。首先,您不需要扩展这个。state,React只会对指定的键应用状态更改 其次,setState的类型故意不使用Partial,这是因为在键上显式设置un
这里
tslint
抱怨setState
需要类型为Pick
的对象,但这需要我提前指定(并预测)要更改的属性,这是不可能的。我听说React的diffing算法检查引用,但我仍然担心将整个state
对象放入setState
会增加额外的开销,或者是不必要的。首先,您不需要扩展这个。state
,React只会对指定的键应用状态更改
其次,setState
的类型故意不使用Partial
,这是因为在键上显式设置undefined
将执行状态更新,因此它使用Pick
()
要解决此问题,您可以将状态更新转换为拾取
updateState=(条件1:boolean,条件2:boolean)=>{
const stateChanges={};
如果(条件1){
stateChanges.a='someValue 1';
}
如果(条件2){
stateChanges.b='someValue 2';
}
这是我的国家(
{…stateChanges}作为选择,
()=>this.dosomethingthatdependensonstate()
);
}
谢谢!重新。扩展this.state
-这是我唯一能想到的方法,可以在那里选择所需的类型(我的stateChanges
是部分)。(谢谢你的链接!)
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.setState(
{...stateChanges},
(...)
);
updateState = (condition1: boolean, condition2: boolean) => {
const stateChanges = {};
if (condition1) {
stateChanges.a = 'someValue 1';
}
if (condition2) {
stateChanges.b = 'someValue 2';
}
this.setState(
{ ...stateChanges } as Pick<IMyComponentState, keyof IMyComponentState>,
() => this.doSomethingThatDependsOnState()
);
}