【问题标题】:setState and setTimeoutsetState 和 setTimeout
【发布时间】:2018-04-16 06:41:21
【问题描述】:

有时 setState 本身并不能完全正常工作,我正在添加小超时来做到这一点。 我的第一个问题是;

1-) 为什么 setState 有时无法立即工作?

2-) 添加setTimeout是否正确? - 它的延迟很小,比如 10 毫秒,没什么,但它使我的代码能够工作并更新状态。

当我在 Angular1 中编码时,我们有时会使用 $timeout 作为范围来应用这些更改。但是这样做是可以的,在 React 中我不确定这一点。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 您能否提供几行代码来说明您要实现的目标?
  • setState 是异步的。这意味着 setState 不保证 this.state.property 会立即反映更新的值。 setState 中有一个回调参数,将在状态更新后触发。
  • 你是在类组件的构造函数中调用setState吗?
  • @CapitanFindus - 其实很简单。只是尝试更新状态,但没有 setTimeout 它不起作用,这可能是什么原因?
  • 向我们展示您的代码!不要想知道是什么导致了这种行为,向我们展示您的代码,以便我们提供帮助!

标签: javascript reactjs


【解决方案1】:

听起来您正试图在render 中调用setState。这很糟糕,因为render 在状态更新后立即发生。它会导致渲染循环。您也不应该使用setTimeout 来执行此操作。这会导致 React 停止警告你,因为它不再能够检测到问题。这会在您的应用中导致大量随机错误。

您的症状表明您需要将状态推送到容器组件中。

【讨论】:

    【解决方案2】:

    设置状态有延迟的原因是设置状态时调用了ReactJS的3个生命周期方法。 setTimeout 是一种获取刚刚设置的状态的当前值的方法,但是另一种选择是您可以在 setState 内创建一个回调函数来获取当前值。 除非没有其他选择,否则必须始终避免使用 setTimeout。

    示例: this.setState({show:true},()=>{console.log(this.state.show)})

    【讨论】:

    • setTimeout 不是获取状态值的好方法。 React 批量状态更新。执行 setTimeout 时可能已设置,也可能未设置。
    猜你喜欢
    • 2020-11-05
    • 2023-03-16
    • 2021-01-31
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多