【问题标题】:Why does setTimeout return a number instead of text? ReactJS为什么 setTimeout 返回一个数字而不是文本?反应JS
【发布时间】:2023-03-21 15:49:01
【问题描述】:

我正在使用 Reactjs,我需要使用 setTimeout 显示一条消息,但它总是向我返回一个数字。有谁知道原因吗?

这是我的代码:

  messageError = () => {
       return <h1>Error!</h1>
  }

render() {
  return (
   ...
     { this.props.error.code != undefined ?
                            setTimeout(() => { this.messageError() }, 3000) : null }

谢谢!

【问题讨论】:

  • 因为setTimeout 不会像您在这里想的那样返回任何东西。它返回一个正整数并执行一些操作。在这里,您正在调用您的函数,但它的返回值不能像那样呈现。你来这里的目的是什么?为什么要延迟?
  • @devserkan 谢谢。我只想显示错误消息。
  • 不客气。好的,但为什么会延迟?
  • developer.mozilla.org/en-US/docs/Web/API/… 应该告诉你所有你需要知道的。
  • 然后根据这个错误条件渲染你的组件。你不需要在这里耽搁。即使你需要你也不能像那样使用setTimeout

标签: javascript reactjs settimeout


【解决方案1】:

我猜你做错了。据我了解,你想要别的东西。我给你举一个例子,它可能会有所帮助。

class MyComponent {
  state = {
    error: false,
  }

  componentDidMount() {
    setTimeout(() => {
      this.setState({
        error: true,
      })
    }, 3000);
  }

  renderMessageError() {
    return <h1>Error</h1>
  }

  render() {
    if (this.state.error) {
      return this.renderMessageError();
    }

    return null; //
  }
}

【讨论】:

  • 该死,我打算给出几乎完全相同的代码 :) 有 2 秒的延迟和一些三元运算符 :)
  • 您的代码帮助了我,我使用 componentWillReceiveProps 解决了它。谢谢。
  • 我不建议使用 componentWillReceiveProps,这将在较新版本的 react 中被弃用。 reactjs.org/docs/…
【解决方案2】:

这是一个异步的,你不能指望它的返回值。数字为setTimeout的ID,用于清除setTimeout。

【讨论】:

    【解决方案3】:

    因为这是应该做的。

    setTimeout 不会在指定的时间内暂停执行。它安排您的函数稍后发生,然后返回一个可用于调用该调度的值(通常是一个数字)。

    该函数显然不能从未来返回值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-18
      • 2017-08-04
      • 2021-11-22
      • 2011-06-07
      • 2019-03-29
      • 2016-06-15
      • 1970-01-01
      相关资源
      最近更新 更多