如何清除反应状态变量(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
}
提前致谢
答案 0 :(得分:2)
您不需要先分配空数组。只需将新数组传递给它。它不起作用的唯一原因是setState
是异步调用。像这样使用它
this.setState({item : items}, () => console.log("ITEMS : ",this.state.item) )
答案 1 :(得分:1)
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.....)
})
它会很好用。