Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应+;TypeScript-如何使用带“的单个对象更新状态”;“动态”;一系列变化_Reactjs_Typescript_Setstate_Tslint - Fatal编程技术网

Reactjs 反应+;TypeScript-如何使用带“的单个对象更新状态”;“动态”;一系列变化

Reactjs 反应+;TypeScript-如何使用带“的单个对象更新状态”;“动态”;一系列变化,reactjs,typescript,setstate,tslint,Reactjs,Typescript,Setstate,Tslint,我想在条件更新列表的末尾更新状态,并累积要立即提交的更改(以避免setState出现异步问题) 这里tslint抱怨setState需要类型为Pick的对象,但这需要我提前指定(并预测)要更改的属性,这是不可能的。我听说React的diffing算法检查引用,但我仍然担心将整个state对象放入setState会增加额外的开销,或者是不必要的。首先,您不需要扩展这个。state,React只会对指定的键应用状态更改 其次,setState的类型故意不使用Partial,这是因为在键上显式设置un

我想在条件更新列表的末尾更新状态,并累积要立即提交的更改(以避免setState出现异步问题)


这里
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()
  );
}