我正在尝试同时设置多个状态属性,但由于setState()
异步我使用回调,但是我需要编辑更多属性时间这个代码变得更多&更难看!
还有其他好方法可以达到这个目的吗?
this.setState(
{
item_1: true
},
(e => {
this.setState(
{
item_2: false
},
(e => {
this.setState(
{
item_3: 'Hello World'
}
)
})
)
})
)
答案 0 :(得分:6)
很有可能将它们全部设置在一起,如下所示:
this.setState({
item_1: true,
item_2: false,
item_3: 'Foo'
});
如果您仍希望在状态更改后进行某些更改,则仍可以使用此回调。比如setState({obj},callback);
答案 1 :(得分:2)
@HoriaComan答案是正确的,但提供更多信息。
是的,setState是异步的,但当你的其他输入取决于前一个输出时,异步行为会起作用,
在您的情况下,所有状态值都是独立的。所以你可以直接设置像
这样的状态this.setState({
item_1: true,
item_2: false,
item_3: 'Foo'
});
如果您想在设置实例后立即使用更新状态,则需要使用回调
this.setState({
item_1: true,
item_2: false,
item_3: 'Foo'
}, ()=> {
console.log(this.state.item_1, this.state.item_2, this.state.item_3);
});