javascript - react setState 回调没有更新状态

标签 javascript reactjs setstate

如果 monthOffset = 12 如果 yearOffset = 2018,条件将评估为真并将 yearOffset 状态更新为 2017。根据我读过的 react 文档和其他答案, this.setState 中的回调函数在状态更新后触发,但 console.log() 是仍在输出 2018。我尝试了几种不同的方法来根据其他相关问题的答案来实现此代码,但我的方法不起作用。我不确定为什么。

handleClick(e) {
  const { monthOffset, yearOffset } = this.state
  this.setState({ monthOffset: monthOffset - 1 })
  if ( monthOffset - 1 === 11 ) { this.setState((prevState) => { 
    return { yearOffset: prevState.yearOffset - 1 } },
    () => {console.log("yearOffset", yearOffset)}
  )}
  console.log("clicked")
}

最佳答案

也许您可以通过以下方式简化您的逻辑,以避免多次调用 setState 可能导致意外结果:

handleClick(e) {

  const { monthOffset, yearOffset } = this.state

  // call setState once
  this.setState({ 

    // Always decrement month offset
    monthOffset : monthOffset - 1, 

    // Only decrement year offset if current month offset === 12
    yearOffset : (monthOffset === 12) ? yearOffset - 1 : yearOffset

  }, () => {

    console.log("state updated to", this.state)
  })

  console.log("clicked")
}

关于javascript - react setState 回调没有更新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51958570/

相关文章:

reactjs - 如何使用 React 为映射函数中的各个元素设置状态?

javascript - 将新数字“推”入对象数组

javascript - 如何修复 jqgrid 列选择器垃圾布局

javascript - 将属性添加到 React Native 对象数组

javascript - React.js - 可拖动元素上的setDragImage

javascript - 解析 JSON 对象数组并在 ReactJS 中显示它

javascript - VideoJS-动态更改源

javascript - HTML 如何相对于两个 div 定位一个按钮?

javascript - 如何确定组件是否包含 React 层次结构

reactjs - React SetState 不调用 render