setState不在SetInterval里面工作在React中

时间:2016-05-24 17:59:56

标签: javascript react-native ecmascript-6 react-jsx

当我点击调用_handlePressStartStop()函数的按钮时,我收到有关setState的错误。它告诉:

 **(intermediate value).bind is not a function**

我知道我在 这个 时遇到了麻烦,也许这是我问题的根源。这是我的代码:

class StopWatch extends Component {

constructor(props) {
  super(props);

  this.state = {
    startTime: null,
    timeElapsed: null
  };
}

render() {
  return (
    <View style={styles.container}>
      <View style={styles.header}>
        <View style={styles.counter}>
          <Text style={styles.counterText}>{this.state.timeElapsed}</Text>
        </View>
        <View style={styles.buttonsWrapper}>
          <Button buttonType='startStop' onPress={this._handlePressStartStop}>Start</Button>
          <Button buttonType='lap' onPress={this._handlePressLap}>Lap</Button>
        </View>
      </View>
      <View style={styles.footer}>
      </View>
    </View>
  )
}

_handlePressStartStop() {
  console.log("press start");

  let startTime = new Date();

  setInterval(() => {
      this.setState({
        timeElapsed: new Date() - startTime
      }.bind(this))
  }, 1000);

}

_handlePressLap() {
  console.log("press lap");
}

}

2 个答案:

答案 0 :(得分:2)

你不想这样绑定到这个。您将对象绑定到无效的对象。你怎么绑定处理程序

onPress={this._handlePressStartStop}.bind(this)而不是?

这样,处理函数内部执行的所有内容都将具有相同的this(反应组件实例)

答案 1 :(得分:0)

尝试 this._handlePressStartStop.bind(this)