首页 > 解决方案 > 第二次尝试反应功能松散状态

问题描述

这段代码在第一次和第三次尝试时都能正常工作,总会有一个步骤出错并且不向数据库发送数据,每次都会破坏我的业务逻辑,我尝试过和不重新加载页面都得到了相同的结果

  apiCall = e => {
    e.preventDefault();
    window.scrollTo(0, 0);
    this.setState({ loading: true });
    const { currentUser } = fire.auth();
    let userEmail = currentUser.email;
    let userUnderscore = userEmail.replace(/\./g, '_');
    let intervalMS = this.state.interval * 60000;
    let url = `https://url.com/api/v1/${userUnderscore}/${this.state.urlTask}?url=${this.state.urlTask}&width=${this.state.width}&interval=${intervalMS}&user=${userUnderscore}&running=true`;
    if (this.state.interval >= 1 && this.state.urlTask !== "") {
      fetch(url)
    }
    else {
      this.setState({ addURLError: true, loading: false });
    }
    this.setState({ addURL: true, addURLError: false });
    fire.database().ref(`/master/users/${userUnderscore}/setup/`)
      .update({
        running: true,
        interval: this.state.interval,
        url: this.state.urlTask,
      });
    setTimeout(
      function () {
        this.setState({ addURL: false, running: true });
        window.location.reload();
      }.bind(this), 2000
    );
  }

  ...

  <Button color='black' onClick={this.apiCall} animated='vertical' type='submit'>

编辑

函数和数据库实际上得到了更新,问题是第二次尝试状态为空,即使表单保存值

标签: javascriptnode.jsreactjs

解决方案


我通过在任何尝试执行该功能之前重新加载应用程序来解决这个问题,这样总是有一个新的状态可以使用:window.location.reload();


推荐阅读