使用时刻反应setState更改小时

时间:2018-03-28 03:14:42

标签: javascript reactjs ecmascript-6 momentjs

我在moment.js设置小时有问题,状态似乎需要一点延迟才能解决时间才能改变状态。

我的事件处理程序看起来像这样

handleKeyDownPickerInput(e, type) {
    let input = e.target.value;

      if (!input || isNaN(input)) return;

      if (type === "hour") {
        this.setState({
          currentTime: moment(this.state.currentTime).set({ h: input })
        });
      }
  }

https://codesandbox.io/s/w22m3wnj4l

1 个答案:

答案 0 :(得分:1)

this.setState({
    currentTime: moment(this.state.currentTime).set({ h: input })
});

setState方法以异步方式运行,因此您无法依赖于此状态'因为它可能无法读取当前状态。

this.setState((previousState) => ({
        currentTime: moment(previousState.currentTime).set({ h: input })
    })
);

请注意,setState方法将匿名函数作为第一个参数,您可以读取之前的状态。

这是你应该写的方式。

供参考: State Updates May Be Asynchronous