避免React setState()回调循环

时间:2017-06-15 05:48:44

标签: javascript reactjs

我正在尝试同时设置多个状态属性,但由于setState() 异步我使用回调,但是我需要编辑更多属性时间这个代码变得更多&更难看!

还有其他好方法可以达到这个目的吗?

this.setState(
  {
    item_1: true
  },
  (e => {
    this.setState(
      {
        item_2: false
      },
      (e => {
        this.setState(
          {
            item_3: 'Hello World'
          }
        )
      })
    )
  })
)

2 个答案:

答案 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);
});