如何清除反应状态数组?

时间:2017-08-16 13:20:06

标签: javascript arrays reactjs redux react-redux

如何清除反应状态变量(Array)中的现有数据并为其分配另一个数组。我试过下面的东西,但它不起作用。

    itemsChanged(items) {
        this.setState({item : []})    //item is my state variable
        this.setState({item : items})
        console.log("ITEMS : ",this.state.item)   //this  will not print the updated value
    }

提前致谢

6 个答案:

答案 0 :(得分:2)

您不需要先分配空数组。只需将新数组传递给它。它不起作用的唯一原因是setState是异步调用。像这样使用它

 this.setState({item : items}, () => console.log("ITEMS : ",this.state.item) )

答案 1 :(得分:1)

根据React's docs

  

React可以将多个setState()调用批处理为单个更新以提高性能。

如果您想在<td><a href="/staff/{{$staff->id}}">{{$staff->name}}</a></td> <td><a href="/department/{{$staff->deptname}}">{{$staff->deptname}}</a></td> 之后检查您的州值,您应该这样做:

setState

答案 2 :(得分:0)

setState是一种异步方法。因此,当您在控制台上打印时,它仍然可以更新。您可以在返回渲染之前使用控制台日志。

...

render(){
  console.log("ITEMS : ",this.state.item);
  return (<div>...</div>)
}
...

答案 3 :(得分:0)

正如他们所描述的那样:

...
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
...

@NgModule({
  imports: [
    ...,
    FormsModule,    //added here too
    ReactiveFormsModule //added here too
  ],
  declarations: [...],
  providers: [...]
})

export class AuthorModule {}

因此可能表明它不是同步操作。

使用:

setState(updater, [callback])

答案 4 :(得分:0)

关于CreditCardsScreen cc = new CreditCardsScreen(driver); public void testWhileBroken() { // select Scenario Two cc.selectScenario("Secondary (Amex)"); // enter a Custom Amount cc.enterCustomAmount("1.23"); // click Select cc.clickSelect(); } ,你应该理解的一点是,它是异步工​​作的。如果您在致电setState后直接尝试console.log州,则您将看不到任何更改。

您也不必通过使用空数组调用setState来清除数组 - 您只需用新数组替换当前数组。

setState

如果您想记录更改,我建议您尝试在组件的 this.setState({ items: newItems }); 方法中执行此操作。

答案 5 :(得分:0)

setState是一个异步函数,如果您正在编写代码:

this.setState({xxState})
console.log(this.state.xxState)

程序将首先执行console.log,所以你应该这样写:

this.setState({xxx},()=> {
    console.log(this.state.....)
})

它会很好用。