当基于当前状态的setState时,this.setState不会立即更新

时间:2017-06-19 12:57:01

标签: reactjs react-native

我有一个与此类似的switch-case声明。

switch (this.state.someState) {
  case "string1":
    this.setState({
      someState: "string5"
    });
    break;
  case "string2":
    this.setState({
      someState: "string6"
    });
    break;
  case "string3":
    this.setState({
      someState: "string7"
    });
    break;
  case "string4":
    this.setState({
      someState: "string8"
    });
    break;
  default:
    this.setState({
      someState: "string1"
    });
    break;
}

问题是它根据先前的状态而不是当前状态设置状态。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

setState是异步的,所以如果你真的想这样做,你应该尝试使用回调:

  case "string1":
    this.setState({ someState: "string5" }, () => {
       break;
    });

答案 1 :(得分:0)

我写了几个测试用例,结果问题出在其他地方。我正在使用此switch-case来呈现不同的数据。 React Native具有一项功能,可以在数据类似于以前的数据时阻止不必要的重新呈现。显然,这包括对原始数据阵列进行反转和排序。所以我返回了一个带有[].concat()的新数据数组,并且它有效。