javascript - 使用 moment react setState 更改小时

标签 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

最佳答案

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

setState 方法异步运行,因此您不能依赖“this.state”,因为它可能无法读取当前状态。

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

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

这就是你应该写的方式。

仅供引用: State Updates May Be Asynchronous

关于javascript - 使用 moment react setState 更改小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49525497/

相关文章:

javascript - 如何按对象数组中的任何属性过滤数据?

node.js - 如何导入 npm 包的特定变体

javascript - 如果用户没有回答所有问题,则带有反馈的 HTML 表单

javascript - 如何使必填字段动态 react ?

javascript - 模型删除记录 Ember

javascript - ES6 在组件内包裹组件

javascript - 为什么我的 useEffect() 没有在更改或页面刷新时运行 - React Js?

npm - 无法让 es6 与 Gulp 一起使用

javascript - 如何更改每个字符的颜色

Javascript 使用 if 语句更改样式表